public class Demo{
int i = 10;
public static void value(Demo d){
d.i = 20;//第三步,这里d.i=20。将地址d中的变量i赋值为20.
Demo d1 = new Demo();//第四步,然后你创建d1,但d1.i=10,没错把。
d = d1;//第五步,你将d1地址给了d.所以选择d和d1都指向d1.i=10.
System.out.println(d.i);//第六步 ,所以打印d.i=d1.i=10。
}
public static void main(String [] args){
Demo d = new Demo();//第一步
value(d);//第二步,注意当这一步执行完后因为d1是方法中定义的所以d1地址就不存在了。所以选择d又回到以前的地址。
System.out.println(d.i);//第七步,因为现在是执行主函数中的d的地址,即d.i=20.
}
} 作者: 侯林林 时间: 2012-8-25 18:59
class Demo{
int i = 10;
public static void value(Demo d){
d.i = 20;
Demo d1 = new Demo();
d = d1; //将d1所在内存空间的地址值传给d,即d便代表了d1,因为dl只是实例化对象了,并没有改变类中成员变量的值
System.out.println(d.i); //因而此打印出的是没有变化过的值10
}
public static void main(String [] args){
Demo d = new Demo();
value(d); //调用value函数 得出的值为10
System.out.println(d.i); //此处的d为这个主函数中的Demo d = new Demo(); 因为d中的成员值在调用value函数的时候被改成了20,所以打印出结果为20
}
} 作者: 全海波 时间: 2012-8-25 19:02
作者: 王自强 时间: 2012-8-25 19:39
class Demo{
int i = 10;
public static void value(Demo d){
d.i = 20;
Demo d1 = new Demo();//新的对象d1,分配了新的地址值。d1的属性值i为10
d = d1;//让d指向了新的地址值即d1的地址值,现在d和d1完全相同了。
System.out.println(d.i);//所以d.i即为d1.i,为10
}
public static void main(String [] args){
Demo d = new Demo();
value(d);//打印的是d1的属性值,value把d值传过去,在value内部把d的属性值改变了
//所以下一步输出的是d的新的属性值,即20
System.out.println(d.i);//打印的是d的新的属性值。
}
}