【发布时间】:2012-08-05 13:55:18
【问题描述】:
main(){
Integer i1 = 500;
Integer i2 = 500;
System.out.println(i1 == i2); // O/P is "**false**"
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // O/P is "**true**"
} // End of main.
我无法弄清楚为什么输出不同。据我所知 s1,s2 将指向堆上的同一个对象。所以它们的参考地址是相同的。同样,我认为 Integer 也是一样的。但事实并非如此。为什么不一样?
【问题讨论】:
-
为什么你认为“s1,s2会指向堆上的同一个对象”?
-
答案可能重复:stackoverflow.com/questions/3637936/java-integer-equals-vsstackoverflow.com/a/3637974/227755
The JVM is caching Integer values. == only works for numbers between -128 and 127 -
@Tichodroma B'coz s1, s2 声明时没有使用 new 关键字。所以对 s1, s1; 都会给出相同的参考;
-
@pwned 是的,非常感谢。我知道。但是你还能告诉我为什么会这样吗?
-
@Amarnath 你问为什么JVM只缓存字节大小的整数?我在你的问题中没有看到任何迹象。如果这是您首先想问的问题,我建议您在获得更多答案之前修改问题。
标签: java