为什么==对于Integer和String是不同的?

Ama*_*ath 2 java

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.
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么输出不同.据我所知s1,s2将指向堆上的同一个对象.所以他们的参考地址是一样的.同样地,我认为整数也是一样的.但事实并非如此.它为什么不同?

Dav*_*avz 8

它已在这里得到解答:java:Integer等于vs. ==

摘自这篇文章:JVM正在缓存整数值.==仅适用于介于-128和127之间的数字.因此,在您的示例中,它不适用于500.