public void change(People people) { people = new People();
people.age = 30; }
public static void main(String[] args) { People people = new People();
int age = people.age;
System.out.println(age);
people.change(people);
int age2 = people.age;
System.out.println(age2); }
}
视频中程序的运行结果是 20 20 我自己运行也是这样。但是我比较奇怪的是视频里他说是因为main里面的那个对象和change里面的对象不一样,main里面的对象一直没有改变过,所以最后还是20。 但是我认为在调用change的时候这个函数里面并没有新建一个变量,并不是People people = new People()而是没有开头的那个People所以在这个时候已经改变了传入参数change的指向,那么people.age = 30了之后,people的指向并没有改回去,或者说我觉得永远不可能改回去了,为啥最后出来的结果却是原来的那个20而不是后来的30 呢,望指教
------解决方案-------------------- 形参与实参的问题,如果要变成30,那么这段代码: public void change(People people) { people = new People(); people.age = 30; } 要修改为: public void change(People people) { // people = new People(); people.age = 30; }
------解决方案-------------------- java中参数的传递是值的拷贝,如果你没有在change方法中又创建一个对象,他们就会指向同堆中的同一个对象,但你又为其创建了一个对象,所有就造成两个引用指向两个对象了。
------解决方案-------------------- 方法执行完以后people指向原来的对象
------解决方案-------------------- public void change(People people) { people = new People();