首先,你知道x的结果是正确的,我就不解释了。下面说y 为什么是"B"
y=x;这条是在 operate()这个函数内部的,也就是在operate()内改变了一个引用的对象,那么,在operate()的域结束后,被改动的引用将指向原来的引用。
在这里,也就是y又重新指向了"B"这个对象。
y=x;这条是在 operate()这个函数内部的,也就是在operate()内改变了一个引用的对象,那么,在operate()的域结束后,被改动的引用将指向原来的引用。
在这里,也就是y又重新指向了"B"这个对象。
x.append (y);
y = x;
}
相当于
void operate (StringBuffer x,StringBuffer y){
StringBuffer a=x;
StringBuffer b=y;
a=a.append(b);
b=a;
}
那么,就不能改变它的指向了,但还是可以改变它的内容。
operate函数原型等于C++里的:
static void operate(StringBuffer *x, StringBuffer *y) ;
(假设C++里有StringBuffer这种数据类型)
然后通过operate(&a, &b)调用
a,b实际上都是指向某个StringBuffer的指针
调用operate函数时是将两个分别等于a,b的两个新的指针传递到函数内部
对新的指针进行操作
所以用x.append()能改变a和x共同指向的那个对象
但y=x改变的是y指针,不改变b指针而楼主原来对该代码的理解则是:
operate函数原型等于C++里的:
static void operate(StringBuffer &x, StringBuffer &y) ;
然后通过opearte(a,b)调用不太明的是,后者是在operate函数里对a,b指针直接进行操作?
好象不太可能……
还是在函数执行完成后将原a,b的指针指向新的指针?
“调用operate函数时是将两个分别等于a,b的两个新的指针传递到函数内部”
应该改为“调用operate函数时是将两个分别与a,b指针指向相同的两个新的指针传递到函数内部”哎……不好意思~
本人语文考试一向都只是在及格边缘的……
基本类型,传就是本身对象的值
在类对象的时候,由于java中的对象是通过引用进行操作的,a,b就是引用。
所以在operate传参数中,x=a的副本 y=b的副本,
函数中改变了x所指向对象,也就是a所指向的对象,对象是没有作用域限制的,所以a的对象也就改变了
函数中y=x,也就是y=a的副本了,可是y 并没有对b所指向的对象进行操作
如果想改变一个reference的指向,你得把这个reference返回。