黑马程序员技术交流社区
标题:
一个关于参数传递的问题
[打印本页]
作者:
魏昂
时间:
2012-3-16 14:09
标题:
一个关于参数传递的问题
public class ParamTest
{
public void change(Person person,Person person)
{
person.name = "张三";
person2.name = "李四";
}
public static void main(String[] args)
{
Person person = new Person();
person.name = "王五";
Person person2 = person;
ParamTest test = new ParamTest();
test.change(person,person2);
System.out.println(person.name);
}
}
为什么 最后的结果会是 李四呢? 求解
作者:
蒙武辉
时间:
2012-3-16 14:27
因为person和person2是指向同一个对象,首先你把这个对象的名字改为张三,然后再改为李四。
作者:
张希强
时间:
2012-3-16 14:30
Person person2 = person;
这句话是吧person的引用给了person2, 你修改person2的时候就是在修改person
你把 public void change(Person person,Person person)
中的两行代码换下位置结果就不一样。
作者:
李中豪
时间:
2012-3-16 15:29
传入change()的person和person2指向一个对象,不管你在主函数中怎么赋值,对于change没有影响;当执行person.name = "张三";时,person指向的对象中的值是张三,在执行person2.name = "李四";时,person2指向的对象中的值是李四。只要person和person指向的是一个对象,输出person,值一直都是李四。
作者:
张润政
时间:
2012-3-16 15:51
额,这个问题严格来讲应该不算是参数传递的问题,它是一个地址赋值的问题。你或许没有分清楚地址的传递过程吧。
首先person.name = "王五"; 我们来假设这个名叫王五的person的地址值是12345,后来你又执行了Person person2 = person; 这条语句又将person的地址12345赋值给了person2,那么它的地址也是123454(注意,person2是一个Person类的引用,它是被person给赋值初始化的,并不是new了一新的对象)
然后test.change(person,person2);person.name = "张三";person2.name = "李四"; 这条语句又开始跟jvm说了:那个jvm啊,你把12345这个地址里头住的人给我改个名字叫张三。。。后来它又该注意了,不行,你还是把12345里头住的这个人的名字改成李四吧。然后你就你就打印了一下他的名字。。。哇@!@! 果真是李四!
呵呵,笑纳!
作者:
魏昂
时间:
2012-3-16 16:46
张润政 发表于 2012-3-16 15:51
额,这个问题严格来讲应该不算是参数传递的问题,它是一个地址赋值的问题。你或许没有分清楚地址的传递过程 ...
嗯 谢谢 嘿嘿
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2