Java - 打开关键字“返回”的问题

问题描述 投票:-1回答:5

我对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
java class methods return override
5个回答
0
投票

你的学生不对。

return new Person(n);Person(String name)。那里没有任何东西可以修改this在调用站点引用的实例。

可能更合适的change实现

Person change(String n) {
    name = n;
    return this;
}

假设您仍然想要返回一个Person实例 - 通常这种方法是void类型,但是您拥有它的方式确实允许方法链接。


0
投票

试试这个

String change(String n) {
    return name = n;
}

0
投票

我不清楚你说的是什么,但如果你想把杰克变成朱莉娅,你应该这样做:

Person pone = new Person("Jack");
pone = pone.change("Julia");

0
投票

关键字new here意味着change方法将创建Person的新实例,并为新实例分配自己的内存,然后构造函数中的this指向已创建的新对象。该对象不会影响现有人。


0
投票

你的学生不对。没有值被覆盖。而不是一个人对象创建了2个人对象。

在这里创建了2个Person对象。一个引用变量称为“pone”(值为Jack),另一个(值为Julia)没有任何引用变量来保存从“change”方法返回的对象。

  1. 的System.out.println(pone.change( “朱莉娅”));打印朱莉娅作为第二个对象有朱莉娅的名字。此值未分配给任何引用变量,因此将来永远不会访问此值,并且该值适用于GC。
  2. 的System.out.println(推迟实施);将Jack打印为pone是保存第一个人对象值的引用变量。
© www.soinside.com 2019 - 2024. All rights reserved.