y=x;操做的是y对象的引用=x对象的引用
这时候只是引用的值变了,这个引用的值是局部的,在main里面其实b的引用没有变,还是“B”的引用.
所以说:operate()只返回对象值所在的引用。你可以在y=x;后面操作y这个值,变化的其实是x,just like:y.append(x);
结果pirnt出来的是ABAB,B,就说明这个问题了我是这样理解的,不知对不?
这时候只是引用的值变了,这个引用的值是局部的,在main里面其实b的引用没有变,还是“B”的引用.
所以说:operate()只返回对象值所在的引用。你可以在y=x;后面操作y这个值,变化的其实是x,just like:y.append(x);
结果pirnt出来的是ABAB,B,就说明这个问题了我是这样理解的,不知对不?
你可以在方法中打印 以便看的清楚
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
System.out.println(x+","+y);
}
这时候应该是 AB,AB鱼片是82年5月12号的
我是26号的 呵呵
static void operate(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
我是这样理解的。operate中的x ,y 实际上只是主函数中x,y中的一个引用,指向同一块内存。。
在operate 中改变的x引用的内存值,而operate 中的y的引用改为指向x了,并没改变主函数中y的内存。
因为形式参数不能改变实在参数的值,如果换成int,你一定可以理解.
这里StringBuffer是一样的,传递的是一个引用,在函数里面会有一个新的引用的副本,这个引用和实参
指向同一个对象.
相当于
StringBuffer temp=b;
temp=a;
这里b当然不会变了
a引用'A'
b引用'B'
然后作为参数传递给operate()方法在operate()方法里面:
x引用'A'
y引用'B'经过x.append(y)以后
x引用'AB'
y引用'B'再经过y=x以后
x引用'AB'
y引用'AB'那么x,y的引用是怎么传递到main()里面的a,b去的?
关键是这里想不太明白
operate()中,x.append(y),实际上是改变了x引用的内容,由于a跟x引用同一个对象,所以a的引用也会随之改变
而y=x只是改变operate()中y的引用,这个是局部的,不会影响到main()中b的引用
所以结果是AB,B这样理解应该对了吧
我的理解是这样的,不知道对不对
x引用的是a,y引用的是b
当方法的x.append(y)调用时,那么他会改变a内存中的值,也就是相当于赋值给了a,调用完后释放内存。
那么x的值还是a原来的哪个值把再它赋给y。