请问个关于StringBuffer作为参数的问题
Public class Test{
Public static void main(String[] args ){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
Oprate(a,b);
System.out.println(a+","+b);
}
Static void Oprate (StringBuffer x, StringBuffer y){
x.append(y);
y=x;
}
}
a) A,B
b) AB,B
c) A,AB
d) AB,AB
为什么答案是B。。
------解决方案-------------------- x.append(y); 所以为 AB
y=x; 这个在局部方法内无效,所以操作之后,y仍是B
------解决方案--------------------是B啊,因为你没有改变StringBuffer y的值,它不是引用类型
------解决方案--------------------值传递和引用传递的区别,如果穿的是基本类型,调用方法后,值将改变,而传引用类型,值不变,append是内部方法,调用会改变。
------解决方案--------------------
Java code
class Test{
public static void main(String[] args ){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
Oprate(a,b);
System.out.println("方法完成之后AB"+a+","+b);
System.out.println("方法完成之后的AB指向的对象为"+a.hashCode()+","+b.hashCode());
}
static void Oprate (StringBuffer x, StringBuffer y){
x.append(y);
y=x;
System.out.println("方法完成之后XY"+x+","+y);
System.out.println("方法完成之后的XY指向的对象为"+x.hashCode()+","+y.hashCode());
}
}