我知道String
是不可变的,它的价值无法改变,但为什么下面StringBuffer
的值在发送时不会发生变化方法参数。根据我的理解,它应该随着新值" bb"而改变。谢谢您的帮助。
class Ideone {
public static void main (String[] args) {
String s = "aa";
StringBuffer sb = new StringBuffer("aa");
modify(s, "bb");
modify2(sb, "bb");
System.out.println(s);
System.out.println(sb);
}
public static void modify(String s, String ss) {
s = ss;
}
public static void modify2(StringBuffer sb, String ss) {
sb = new StringBuffer(ss);
}
}
答案 0 :(得分:2)
Java中的通用规则是您不能更改传递给方法的对象的引用,但您可以更改其内容。
public static void modify2(StringBuffer sb, String ss){
此方法将引用的副本带到StringBuffer
。将该引用更改为指向对象对原始对象无任何影响。但是如果你把它实现为
sb.clear();
sb.append(ss);
然后它会起作用。
同样,规则是重新分配传递给=
方法的对象对原始对象没有任何作用,但您可以更改该对象的内容。