Java does not support operator overloading because it was a design decision made by the language’s creators. The reason for this decision was to ensure that the code is easy to read and maintain, especially in large projects where different developers may have different ideas about how to use overloaded operators.
By disallowing operator overloading, Java enforces a consistent and unambiguous syntax for operators, which makes it easier for developers to understand code written by others and to avoid unintentional errors. It also ensures that operators behave consistently across different classes and types, without any unexpected behaviour.
Furthermore, Java provides other mechanisms for achieving similar functionality as operator overloading, such as the use of methods with descriptive names that perform the desired operations. This approach also allows for more explicit control over the behaviour of operations, as it allows developers to define the exact behaviour of each method, instead of relying on the default behaviour of overloaded operators.