public class Foo {
2. public static void main (String [] args) {
3. StringBuffer a = new StringBuffer (“A“);
4. StringBuffer b = new StringBuffer (“B“);
5. operate (a,b);
6. system.out.printIn{a +“ ”+b};
7. )
8. static void operate (StringBuffer x, StringBuffer y) {
9. x.append (y);
10. y = x;
11. }
12. }app
打印出来是AB Bpost
由于:AB B
变量a\b\x\y中存储的是StringBuffer变量的引用而不是一个StringBuffer对象。根据非基本类型参数传递为引用传递的规则,operate接收的参数只是StringBuffer对象的引用.所以能够理解为x、a都是指向同一个对象;b、y也是指向同一个StringBuffer对象,因此x.append(y)将致使x和a同指的StringBuffer对象改变(增长"B");而y=x只是让变量y改变指向为和x相同的StringBuffer对象,而y原来所指的对象并不会发生任何改变。对象
因此StringBuffer是引用传递传递的是地址blog
而String 虽然也是对象,但其实final类型的因此至关于值传递class