为什么==返回true?

时间:2012-02-19 17:23:48

标签: java conditional-statements

为什么这个条件返回true,因为我们知道==如果两个变量都有相同的引用,则返回true,但这里的引用不一样,但它仍然进入循环并打印Hello World。

String var1="hi";
String var2="hi";

if(var1==var2){
    System.out.println("Hello World");
}

6 个答案:

答案 0 :(得分:12)

因为Java有一个独特的interned实例池,并且该字符串文字存储在此池中。这意味着第一个“hi”字符串文字与第二个“hi”文字完全相同。

答案 1 :(得分:4)

当您将字符串文字分配给变量时,您可能会获得对同一对象的引用,因为字符串是缓存且不可变的,因此这些字符串实际上具有相同的引用。

答案 2 :(得分:2)

将字符串文字分配给字符串时,该字面值将作为String实例存储到内存中。相同文字的进一步分配将指向相同的内存位置。因此,如果var1var2被声明为String类型,则var1 == var2将返回true,因为它们指向相同的String实例"hi"

答案 3 :(得分:0)

您已将var1和var2声明为int而不是String。

我的编译器拒绝编译代码,说“不兼容的类型”。

您的编译器可能会将字符串“hi”转换为某个数字,例如0,因为变量应该具有数字值。

答案 4 :(得分:0)

参考jvm specifcation

字符串文字 - 或者更常见的是,作为常量表达式(第15.28节)值的字符串 - 是“实习”,以便使用String.intern方法共享唯一实例。 < / p>

答案 5 :(得分:0)

因此实现了 http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5 这里的大多数答案已经指出了正确的方向,但最好是阅读真相的来源。