String s=”abc”
s是栈内变量,它的内存保存的是常量池的常量字符串对象对象”abc”的地址。常量池中的每个值只有一份。String s2 = “abc”;
s和s2两个变量指向的是同一个地址,因此s==s2结果为true
String s1=new String(“abc”);
s1是栈内变量,它的内存保存的是堆中的new String对象的地址,new String在堆中生成对象,并用常量池的字符串对象”abc”初始化堆中的对象,所以堆中的对象的内存的内容和常量池对象的内存的内容一样,但是是不同的两个对象
因此s==s1的结果是false。==比较的是两对象的引用,因此结果为false.
s.equals(s1)的结果是true,因为String的equals方法比较的是对象的内容。