C++ has proven by example that operator overloading makes code almost impossible to maintain. In fact there very nearly wasn?t even method overloading in Java, but it was thought that this was too useful for some very basic methods like print(). Note that some of the classes like DataOutputStream have unoverloaded methods like writeInt() and writeByte(). Source: CoolInterview.com
Operator overloading makes the code more complex and less readable. Also we could define different methods in the same class like plus(),plusplus(), minus() etc and thus bringing operator overloading in Java Source: CoolInterview.com
Operator Overloading An operator is overloaded if it is bound to multiple definitions. When the operator is used in an expression, which definition to use is determined based on the number and type of the operands. Examples: ? in Java, + is used both for addition and string concatenation ? in almost all programming languages, the arithmetic operators (+, -, *, ...) are overloaded to work on both integer and floating point types. Note that integer addition and floating point addition are different operations in assembly language. Notes on overloading: ? many languages (C++, Ada, C#) allow the programmer to overload operators ? Java does not ? overloading can help program readability if the overloaded meaning of the operator is similar to the standard meaning ? overloading can hurt program readability if the overloaded meanings of the operator are very different from each other and/or the standard meaning ? overloading can reduce reliability by weakening the compiler's ability to detect type errors ? by definition, overloading must always be resolved statically. The compiler must be able to determine which meaning is meant by the (static) types of the operands.