- class Go{
- public static void main(String args[]){
- String str1 = "abc";
- String str2 = str1;
- str1 += "de";
- System.out.println(str2);
- StringBuffer sb1 = new StringBuffer();
- sb1.append("abc");
- StringBuffer sb2 = sb1;
- sb1.append("de");
- System.out.println(sb2);
- }
- }
class Go{
public static void main(String args[]){
String str1 = "abc";
String str2 = str1;
str1 += "de";
System.out.println(str2);
StringBuffer sb1 = new StringBuffer();
sb1.append("abc");
StringBuffer sb2 = sb1;
sb1.append("de");
System.out.println(sb2);
}
}
首先看以上代码,我们可以看到 System.out.println(str2)输出的是abc,而System.out.println(sb2)输出的是abcde。
如果你对此有疑问就看我接下来的解释。解释很简单,就是从java源码中去看java究竟是怎么存储和动作的。
首先分析 StringBuffer的父类是AbstractStringBuilder,大家可能不能从java api(chm)中发现这个类,因为它是package access 的 客户端不可见的java类。