怎么没有人?
载调用change(A)的时候,是传递的引用A还是传递的是A的一个拷贝?
如果是传递的引用A,那么为什么change(A)没有回传,没有改变A所指向的对象,
如果传递为拷贝,那么为什么能够在change(A)里面改变A的对象??
是不是说仅仅能够改变参数指向的对象,但是不能改变该引用???
载调用change(A)的时候,是传递的引用A还是传递的是A的一个拷贝?
如果是传递的引用A,那么为什么change(A)没有回传,没有改变A所指向的对象,
如果传递为拷贝,那么为什么能够在change(A)里面改变A的对象??
是不是说仅仅能够改变参数指向的对象,但是不能改变该引用???
chang()产生一个原指向A,后指向B的引用,最后被回收了。
如果直接A=B
那么此时是把B所指向的对象付给A,还是说把B应用付给A??
void m(int a){
i=a;
System.out.println(i);//如果a=2,这里显示2
}
void m1(){
System.out.println(i);//这里显示1
}
你说的例子是传递的基本数据类型!
class my
{
int i=0;
}
my A=new my();
my B=new my();
void Achange(my rr)
{
rr.i=5;
}
void Bchange(my rr)
{
rr=B;
}
现在:
Achange(B);
Bchange(A);
那么B改变了,但是A没有变为B;
如果直接A=B,那么改变了。
如果说载方法内有效果,那么在执行这一段代码的时候,是不是说A曾经也改变为B
了,但是函数结束后,又变为原来的了。
objectA objectB—-(内存中的对象)
| |
| |
引用A 引用B
那么Achange(my)改变了参数所指向的对象(没有改变引用(内存地址))
那么Bchange(my),用B来赋值给A,也就是说让A也指向了objectB
你说的例子是传递的基本数据类型!
class my
{
int i=0;
}
my A=new my();
my B=new my();
void Achange(my rr)
{
rr.i=5;
}
void Bchange(my rr)
{
rr=B;
}
现在:
Achange(B);
Bchange(A);
那么B改变了,但是A没有变为B;
如果直接A=B,那么改变了。
如果说载方法内有效果,那么在执行这一段代码的时候,是不是说A曾经也改变为B
了,但是函数结束后,又变为原来的了。
objectA objectB—-(内存中的对象)
| |
| |
引用A 引用B
那么Achange(my)改变了参数所指向的对象(没有改变引用(内存地址))
那么Bchange(my),用B来赋值给A,也就是说让A也指向了objectB
你说的例子是传递的基本数据类型!
class my
{
int i=0;
}
my A=new my();
my B=new my();
void Achange(my rr)
{
rr.i=5;
}
void Bchange(my rr)
{
rr=B;
}
现在:
Achange(B);
Bchange(A);
那么B改变了,但是A没有变为B;
如果直接A=B,那么改变了。
如果说载方法内有效果,那么在执行这一段代码的时候,是不是说A曾经也改变为B
了,但是函数结束后,又变为原来的了。
objectA objectB—-(内存中的对象)
| |
| |
引用A 引用B
那么Achange(my)改变了参数所指向的对象(没有改变引用(内存地址))
那么Bchange(my),用B来赋值给A,也就是说让A也指向了objectB
void m(Object a){
a.b=2;
}//这时对属性b的改变是永久的,即方法内外均有效。因为a的内存位置并没有改变,改变的仅仅是它的一个属性(属性并没有做为参数引用)。所以内外有效
载函数里面
{
A=B;
}
其实是试图改变引用A而不是试图改变A所指的对象,
那么,如果要在函数里面交换两个对象怎么办??