Ano*_*oop 5 java stringbuilder
检查这个代码
public class StringbuilderDoubt {
public static void main(String args[]){
new StringbuilderDoubt().methodTest();
}
public void methodTest(){
String str=new String("Default");
StringBuilder sb=new StringBuilder();
sB1(str,sb);
sB2(str,sb);
System.out.println(str+".........."+sb);
}
private void sB1(String str1, StringBuilder sb1){
str1+="str1";
sb1.append("sB1");
}
private void sB2(String str2, StringBuilder sb2){
str2+="str2";
sb2.append("sB2");
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:Default..........sB1sB2
为什么 StringBuilder 的工作方式类似于按引用传递?在 methodTest 中,我传递了两个对象 string 和 string builder。String 是按值传递的,但 StringBuilder 看起来像按引用传递,并且 StringBuilder 对象从调用方法中被更改。
当您将 StringBuilder 实例传递给方法时,实例值是按值传递的。正如您所看到的,您可以将字符附加到方法内部的 StringBuilder 实例,而不返回实例值。
如果需要,您还可以返回 StringBuilder 实例值,但这不是必需的。它没有改变。
这种“按引用传递”也适用于大多数 Collection 类(List、Map)以及您自己的具有 getter 和 setter 的类。
如果您不希望出现这种行为,则必须对传递的实例进行深层复制。如果您从公共 API 返回 Collection 类,您就会执行此操作。