> Really? Does 3+"" really convert the 3 to a string in Java? Yes. It is one of my favorite Java features... If a binary + has one argument of type java.lang.String, then the other object is coerced to string as well (unless the other operand is also a string), using the following procedure: If it is a primitive type, an instance of the appopriate helper is created, in this case java.lang.Integer, so we only have java.lang.Object specializations now (*). Then, .toString() is invoked for the object, and the strings are concatenated. This allows to write things like System.out.println("Name:"+name" Age:"+age); so they did not have to copy the printf(3C) family of function, nor to introduce operator overloading for iostream-style output. Teaching this stuff to students, it turns out that there are two major sources of confusion: a) System.out.println("abc"+3+3) prints "abc33", whereas System.out.println(3+3+"abc") prints "6abc", so the binary + is not commutative. b) Both System.out.println("result "+myobj) and System.out.println(myobj) work, but for different reasons. In the first case, it works because of the magic binary '+'. In the second case, it works because println is overloaded for all types, i.e. println(int); println(double); ... println(Object); // invokes println(o.toString()); println(String); // does the real work Regards, Martin (*) Implementations don't have to create those temporaries; the usual as-if rule applies.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4