StringBuffer 方法参数 - 不改变值
StringBuffer method parameter - doesn't change value
我知道 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);
}
}
Java 中的通用规则是您不能更改传递给方法的对象的引用,但可以更改其 内容。
public static void modify2(StringBuffer sb, String ss){
此方法将 reference 的 copy 到 StringBuffer
。将该引用更改为指向对象对原始对象没有任何影响。但是如果你把它实现为
sb.clear();
sb.append(ss);
那就可以了。
同样,规则是重新分配传递给方法的对象 =
对原始对象没有任何影响,但您可以很好地更改该对象的内容。
我知道 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);
}
}
Java 中的通用规则是您不能更改传递给方法的对象的引用,但可以更改其 内容。
public static void modify2(StringBuffer sb, String ss){
此方法将 reference 的 copy 到 StringBuffer
。将该引用更改为指向对象对原始对象没有任何影响。但是如果你把它实现为
sb.clear();
sb.append(ss);
那就可以了。
同样,规则是重新分配传递给方法的对象 =
对原始对象没有任何影响,但您可以很好地更改该对象的内容。