JAVA中关于String的若干问题

时间:2023-02-26 11:49:58

  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。