一直不理解String对象的值不能改变是什么意思,
String a = "A";
a += "B";
这时s等于"AB",a不是已经改变了吗?
后来才明白,上面的String对象a,改变的不仅仅是a的值,a所引用的String对象也已经改变了。a最初引用的是String实例"A",后来引用的是String实例"AB"。
public class Str {
public static void main(String[] args){
String a = "A";
String ai = a;
a.concat("B"); // I
a += "C"; // II
System.out.println(a);
System.out.println(a == ai);
System.out.println(a.equals(ai));StringBuffer sb = new StringBuffer("SB");
StringBuffer sbi = sb;
sb.append("APPEND");
System.out.println(sb);
System.out.println(sb == sbi);
System.out.println(sb.equals(sbi));
}
}
A
true
true
SBAPPEND
true
true
true
true
SBAPPEND
true
true
此时对象a的值仍为"A",a对对象的引用也没有改变。
仅注释掉行 I,结果如下:
AC
false
false
SBAPPEND
true
true
此时对象a的值已经改变,但是a对对象的引用也已经改变。
总结:String对象实例"A"的值是不可改变的,但是变量a对对象的引用可以改变。
没有评论:
发表评论