Eclipse字符串缓存错误,==不能按预期工作

时间:2018-07-20 00:42:35

标签: java eclipse string-pool

我有一个具有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缓存中出来。

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 Literals

  

此外,字符串文字总是指的是String类的相同实例。这是因为字符串文字-或更广泛地说,是常量表达式(§15.28的值的字符串)被“ interned ”以使用方法{{ 1}}。

0 个答案:

没有答案