String在是一个字符串数组,在Java中是用private final char value[]来储存的,正因为它是final类型的,所以String是不可变的(immutable)。相对于String,StringBuffer则是可以改变的字符串。
我们来重点看一下以下的一段代码:
String s1="abc";
String s2=s1;
String s3=new String("abc");
String s4=new String("abc");
system.out.println(s1==s2);
system.out.println(s3==s4);
上面代码中的输出结果分别是什么呢?第一个是true,第二个则是false。为什么是这样的呢,因为s1是"abc"是一个常量,Java中这种常量是放在常量池中,相同的常量在内存中只有一个副本,所以s1==s2为真。而s3,s4是new了两个String对象,这两个不同的对象“abc”都在内存的堆中,地址不同。
String s5=new String("abc");
s5=s5.intern();
system.out.println(s1==s5);
这后面这个结果又是怎样呢?
因为增加了s5=s5.intern();这条语句,词语句表示的是看常量池中是否有“abc”这样的String,若有就返回应用,若没有就创建,所以答案就是true。