StringBuffer作为参数传递的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringBuffer作为参数传递的问题相关的知识,希望对你有一定的参考价值。

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. }

 

打印出来是AB B

因为: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是引用传递传递的是地址

而String 虽然也是对象,但其实final类型的所以相当于值传递

以上是关于StringBuffer作为参数传递的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java语言中的值传递与引用传递

String的按值传递,java传参都是传值(转)

StringBuffer类

StringBuffer和String,StringBuilder的区别?

java传递参数是传值还是传引用

结构体作为函数参数值传递的问题