2

我有一个简单的应用程序,它有一个比较两个文字字符串的 main 方法:

public class App {
    public static void main (String[] args) {
        String first = "a";
        String second = "a";
        System.out.println(first == second);
    }
}

当我在Eclipse中运行这个程序时,我得到false了结果。但是当我通过命令行编译和运行这个程序时,我得到了true

结果应该true适用于两者。为什么 Eclipse 会返回false

我已经使用 JDK 7 和 8 对其进行了测试。


请注意,我知道与==比较身份的比较。

对于这两个变量, JLS 都需要"a"从内部字符串缓存中出来。

String first = "a";  // Creates instance, stores in cache and returns
String second = "a"; // Should return instance from cache

但是,如果我从 Eclipse 运行它,我会得到false比较,因此尽管 JLS 要求它们相同,但两个实例似乎不同。

因此,请参阅JLS§3.10.5 字符串文字

此外,字符串字面量总是引用 String 类的同一个实例。这是因为字符串文字——或者更一般地说,作为常量表达式值的字符串(15.28 节)——是“ interned ”,以便使用 方法共享唯一实例。String.intern

4

0 回答 0