Java Eclipse字符串缓存错误,==无法按预期工作

Java Eclipse字符串缓存错误,==无法按预期工作,java,eclipse,string-pool,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。但是当我通过命令

我有一个简单的应用程序,它有一个比较两个文本字符串的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和JDK 8对其进行了测试


请注意,我知道与
==
的比较用于标识

对于这两个变量,JLS都需要从内部字符串缓存中取出
“a”

String first = "a";  // Creates instance, stores in cache and returns
String second = "a"; // Should return instance from cache
但是,如果我从Eclipse运行此命令,我会得到
false
,以进行比较,因此这两个实例似乎不同,尽管JLS要求它们相同

因此,见:

此外,字符串文本总是指类字符串的同一实例。这是因为字符串文本(或者更一般地说,常量表达式()的值字符串)是“内部的”,以便使用
string.intern
方法共享唯一实例


不要将对象类型与
=
进行比较。就这么简单。我试图弄清楚为什么我在同一个应用程序中得到不同的结果,这取决于我编译和运行的方式。我不知道为什么人们会投反对票。这个问题对我来说似乎很清楚。没有理由就吓跑新人可不好。我知道==比较引用。但这不是我的问题。如果人们也不知道答案,我真的不知道为什么他们会投反对票。按向上投票的顺序0向下投票也许你应该重新表述这个问题,强调你想知道编译器之间的区别,而不是对象比较