If Java does not allow operator overloading, how are operators like - or * able to work with various data types such as doing 5 + 5 or 5 * 5 in some code in Java. Does that mean these operators are overloaded internally in the background in Java, but the user cannot overload them?
Additionally, it is said how the + operator can be used to concatenate Strings by the compiler if String objects are used. Would that not mean there is some overloading happening in the background by language design since the + sign is being replace with some definition to concatenate Strings?