我正在JDK 1.4和1.5上运行此代码,并获得了不同的结果。为什么会这样呢?
String str = "";
int test = 3;
str = String.valueOf(test);
System.out.println("str[" + str + "]\nequals result[" + (str == "3") + "]");
if (str == "3") {
System.out.println("if");
} else {
System.out.println("else");
}
输出:
JDK 1.4上的
str[3]
equals result[true]
if
str[3]
equals result[false]
else
最佳答案
根据this page,Integer#toString
方法(由String#valueOf(int)
调用)是在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);
}
这将解释您的结果,因为字符串文字
"3"
被插入并且"3" == "3"
始终返回true。您可以尝试使用10和11进行验证。
注意:正如已经提到的,
Integer#toString
的javadoc并未说明返回的字符串是否将被保留,因此问题中的两个输出都同样有效。