I\'m running this code with JDK 1.4 and 1.5 and get different results. Why is it the case?
String str = \"\";
int test = 3;
str = String.valueOf(test);
System.o
According to this page, the Integer#toString
method (which is called by String#valueOf(int)
) is implemented like this in 1.4:
public static String toString(int i) {
switch(i) {
case Integer.MIN_VALUE: return "-2147483648";
case -3: return "-3";
case -2: return "-2";
case -1: return "-1";
case 0: return "0";
case 1: return "1";
case 2: return "2";
case 3: return "3";
case 4: return "4";
case 5: return "5";
case 6: return "6";
case 7: return "7";
case 8: return "8";
case 9: return "9";
case 10: return "10";
}
char[] buf = (char[])(perThreadBuffer.get());
int charPos = getChars(i, buf);
return new String(buf, charPos, 12 - charPos);
}
That would explain your result because the string literal "3"
is interned and "3" == "3"
always returns true.
You can try with 10 and 11 to verify this.
Note: as already mentioned, the javadoc of Integer#toString
does not say whether the returned string will be interned or not so both outputs in your question are equally valid.