omg*_*eee 11 java jdk1.5 jdk1.4
我正在使用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");
}
Run Code Online (Sandbox Code Playgroud)
输出:
在jdk 1.4
str[3]
equals result[true]
if
Run Code Online (Sandbox Code Playgroud)在jdk 1.5
str[3]
equals result[false]
else
Run Code Online (Sandbox Code Playgroud)ass*_*ias 11
根据这个页面,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);
}
Run Code Online (Sandbox Code Playgroud)
这可以解释你的结果,因为字符串文字"3"被实习并且"3" == "3"总是返回true.
您可以尝试使用10和11来验证这一点.
注意:如前所述,javadoc Integer#toString并未说明返回的字符串是否会被实习,因此您问题中的两个输出都同样有效.
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |