public static void mb_method(StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
public static void main(String[] args) {
StringBuffer a = new StringBuffer("A");
StringBuffer b = new StringBuffer("B");
mb_method(a, b);
System.out.println(a + "," + b);
}
为何输出结果是:
AB,B
java的方法都是值传递,你在mb_method 里面, 让y赋值为x对外面的b根本没有影响。这里面的赋值都在在方法栈里面的,出栈之后,里面的复制跟外面无关。
这个方法可以简单认为是这样:
Sb a; Sb b; //invisable
Sb x = a;
Sb y = b;
x.append(xx);
y=x;
这样, y的改变,对b没有任何影响。
而a的值(实际上不是他的值变了,而是指向的对象修改了成员)为啥会改变,是因为方法中的x和a都指向了同一个对象,所以对x做成员操作就跟对a做成员操作一样。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。