为什么这个条件返回true,因为我们知道==如果两个变量都有相同的引用,则返回true,但这里的引用不一样,但它仍然进入循环并打印Hello World。
String var1="hi";
String var2="hi";
if(var1==var2){
System.out.println("Hello World");
}
答案 0 :(得分:12)
因为Java有一个独特的interned实例池,并且该字符串文字存储在此池中。这意味着第一个“hi”字符串文字与第二个“hi”文字完全相同。
答案 1 :(得分:4)
当您将字符串文字分配给变量时,您可能会获得对同一对象的引用,因为字符串是缓存且不可变的,因此这些字符串实际上具有相同的引用。
答案 2 :(得分:2)
将字符串文字分配给字符串时,该字面值将作为String实例存储到内存中。相同文字的进一步分配将指向相同的内存位置。因此,如果var1
和var2
被声明为String类型,则var1 == var2
将返回true
,因为它们指向相同的String实例"hi"
。
答案 3 :(得分:0)
您已将var1和var2声明为int而不是String。
我的编译器拒绝编译代码,说“不兼容的类型”。
您的编译器可能会将字符串“hi”转换为某个数字,例如0,因为变量应该具有数字值。
答案 4 :(得分:0)
字符串文字 - 或者更常见的是,作为常量表达式(第15.28节)值的字符串 - 是“实习”,以便使用String.intern方法共享唯一实例。 < / p>
答案 5 :(得分:0)
因此实现了 http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5 这里的大多数答案已经指出了正确的方向,但最好是阅读真相的来源。