这是官方的解释,两种简单的初始化确实是等效的,但严格意义上来讲不是完全等效,第一种是在常量池中给出不能改变的abc,哪怕后来再初始一个一样的,也不会改变内存,只会多一个引用,而第二种就不同了,直接new了一个新的空间,不会去检查有没有重复,因为实体与实体之间是划界的,各有各的地盘,来看一段简单的代码。
package string.demo;
public class stringdemo {
public static void main(String args[]) {
String s0="abc";
String s1="abc";
char arr[]= {'a','b','c'};
String s2=new String(arr);
String s3=new String("abc");
String s4=new String("abc");
System.out.println(s1==s0);
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s3==s4);
System.out.println(s1.equals(s2));
}
}
要注意一下,equals比较的是内容,==比较的是引用(地址);