求解一道java题
static void operate(StringBuffer x,StringBuffer y){
y.append(x);
y=x;//这里不是把x赋值给了y了吗?
}
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);//答案为什么会是A,BA
}
} 展开
解析如下:
public class Test06 {
static void operate(StringBuffer x,StringBuffer y){
//这样理解:x,y只是一个地址。a,x指向同一个地址,y,b指向同一个地址
//其中 x->'A',y->'B'
//实参 a->'A',b->'B'
y.append(x);//将x所指向地址的值添加到y指向地址的值得后面
//结果:x->'A',y->'BA'
//实参 a->'A',b->'BA'
StringBuffer c =y; //将c所指向y所指向地址
//所以c->'BA'
//实参 a->'A',b->'BA'
y=x;//此时,只是让y指向x指向的地址,即y->'A'
//结果:x->'A',y->'A'
//实参 a->'A',b->'BA'
//c->'BA'
System.out.println("x="+x);//x=A
System.out.println("y="+y);//y=A
System.out.println("c="+c);//c=BA
}
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");//
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println("a="+a+","+"b="+b);
}
}
结果如下:
ps:java中形式上没有“地址”这个概念,实际上是有的,可以这样理解。
在赋值之前,已经把参数x(其地址和变量a一致)追加到参数y(追加时y的地址和变量b的地址一致),这是y中的内容变成了BA。这相当于把变量b的内容改为了BA。
StringBuffer和String最大的区别在于,String的内容不可改变,每次字符串相加,都是创建一个新的String对象;而StringBuffer中的内容可以通过insert、append等方法修改。
广告 您可能关注的内容 |