由于使用了new关键字,s2指向的是一个堆内存中的新对象,而不是常量池中的字符串常量。如果添加String s3 = "a" + "b" + "c"; s3的值是通过几个字符串常量连接而成的,因此它们在编译时被优化为一个字符串常量"abc"。因为字符串常量在Java中是不可变的,所以它们可以被共享和重用。因此,s3和s1指向的是同一个字符串常量对象,s1==s3。
s2指向堆中 只是堆中和常量池都有一个"abc" 所属区域不同