Question: Coming from C++ to Java, the obvious unanswered question is why didn't Java include operator overloading?

Isn't `Complex a, b, c; a = b + c;` much simpler than `Complex a, b, c; a = b.add(c);`?

Is there a known reason for this, valid arguments for *not* allowing operator overloading? Is the reason arbitrary, or lost to time?

Answer: 
[Groovy](http://groovy.codehaus.org/) has operator overloading, and runs in the JVM. If you don't mind the performance hit (which gets smaller everyday). It's automatic based on method names. e.g., '+' calls the 'plus(argument)' method.
Assuming Java as the implementation language then a, b, and c would all be references to type Complex with initial values of null. Also assuming that Complex is immutable as the mentioned [BigInteger](http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigInteger.html) and similar immutable [BigDecimal](http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html), I'd I think you mean the following, as you're assigning the reference to the Complex returned from adding b and c, and not comparing this reference to a.

> 
> Isn't :
> 
> 
> 
> ```
> Complex a, b, c; a = b + c;
> 
> ```
> 
> *much* simpler than:
> 
> 
> 
> ```
> Complex a, b, c; a = b.add(c);
> 
> ```
> 
>