我对java中的关键字“return”有疑问。
在名为“change”的方法中,将返回具有给定参数n的新人Object,但不会使用新对象覆盖main中定义的对象“pone”。在main方法中执行后,“返回new Person(n)”对象会发生什么?一名学生告诉我,“返回新Person(n)将覆盖pone对象中的值。
这个代码:
public class Person {
String name;
Person(String name) {
this.name = name;
}
Person change(String n) {
return new Person(n);
}
void setname(String n) {
name = n;
}
@Override
public String toString() {
return name;
}
public static void main(String[] args) {
Person pone = new Person("Jack");
System.out.println(pone.change("Julia"));
System.out.println(pone);
}
}
输出:
System.out.println(pone.change("Julia")); -> Julia
System.out.println(pone); -> Jack
你的学生不对。
return new Person(n);
称Person(String name)
。那里没有任何东西可以修改this
在调用站点引用的实例。
可能更合适的change
实现
Person change(String n) {
name = n;
return this;
}
假设您仍然想要返回一个Person
实例 - 通常这种方法是void
类型,但是您拥有它的方式确实允许方法链接。
试试这个
String change(String n) {
return name = n;
}
我不清楚你说的是什么,但如果你想把杰克变成朱莉娅,你应该这样做:
Person pone = new Person("Jack");
pone = pone.change("Julia");
关键字new here意味着change方法将创建Person的新实例,并为新实例分配自己的内存,然后构造函数中的this指向已创建的新对象。该对象不会影响现有人。
你的学生不对。没有值被覆盖。而不是一个人对象创建了2个人对象。
在这里创建了2个Person对象。一个引用变量称为“pone”(值为Jack),另一个(值为Julia)没有任何引用变量来保存从“change”方法返回的对象。