String a = "abc";等价于char data[] = {'a', 'b', 'c'};String a = new String(data);
String a = new String("abc")创建了1个大概两个对象
起首在栈中界说了一个引用变量a,然后在堆中new一个String对象,a指向这个对象,然后new出来的String对象再指向常量池中的abc。
比力
String a = "abc"; String b = "abc"; String c = new String("abc"); String d = new String("abc"); System.out.println(a == b); System.out.println(a == c); System.out.println(c == d);效果:true、false、false
new String("abc") 无论字符串常量池中是否存在“abc”,都会在堆中天生一个新的对象,c和d的引用指向各自堆的地点,堆引用才指向常量池。以是a、c、d三者不相称。