== equals()
true true String s1 = "abc";
String s2 = "abc";
在赋值过程中"abc"是常量,存储在常量池,s2获取的还是"abc"的地址值。
false true s2=new String("abc");
s2获取的是一个new String对象的地址值,不是"abc"的地址值。new String()是"abc"在堆内存中的副本。
true true s2="a"+"b"+"c";
java的常量优化机制在编译时会将常量进行合并优化。
false true s2="ab";
s2 =s2+"c";
系统创建一个StringBuffer或StringBuilder对象,存入s2,并用append()追加"c",最后通过toString()创建一个字符串对象存储"abc",所以地址值不同。 |
|