Java 字符串的不同值?

Java 字符串的不同值?,java,Java,我是java的新手 class Demo{ public static void main(String[] args) { String s1=new String("abc"); String s2=new String("abc"); String s3="xyz"; String s4="xyz"; System.out.println(s1==s2); //line 7 Sys

我是java的新手

class Demo{
    public static void main(String[] args) {
        String s1=new String("abc"); 
        String s2=new String("abc"); 
        String s3="xyz";
        String s4="xyz";

        System.out.println(s1==s2); //line 7
        System.out.println(s3==s4); //line 8
    }
}
我只是不明白为什么第7行是假的,第8行是真的

如果有人能给我解释一下,我将不胜感激。

当您使用:

String s1=new String("abc"); 
String s2=new String("abc"); 
s1和s2是在运行时创建的不同对象

String s3="xyz";
String s4="xyz";
s3和s4在编译时分配,java编译器只存储字符串的一个副本


Related:stackoverflow.com/questions/2486191/what-is-the-java-string-pool-and-how-is-s-different-from-new-strings