Java:对象字段分配

Java:对象字段分配,java,Java,我试图理解一些可能非常简单的事情,所以如果我看起来像个菜鸟,我道歉 我有一个java类: public class Student { public String name = ""; public int age = 0; public String major = "Undeclared"; public boolean fulltime = true; public void display() { System.out.print

我试图理解一些可能非常简单的事情,所以如果我看起来像个菜鸟,我道歉

我有一个java类:

public class Student {
    public String name = "";
    public int age = 0;
    public String major = "Undeclared";
    public boolean fulltime = true;

    public void display() {
        System.out.println("Name: " + name + " Major: " + major);
    }

    public boolean isFullTime() {
        return fulltime;
    }
}
这节课我称之为第一节课:

public class TestStudent {
    public static void main(String[] args) {
        Student bob = new Student();
        Student jian = new Student();
        bob.name = "Bob";
        bob.age = 19;
        jian = bob;
        jian.name = "Jian";
        System.out.println("Bob s Name: " + bob.name);
    }
}
这将打印:

鲍勃的名字:简


我很好奇那里的作业是如何完成的。

这一行导致
jian
bob
指向相同的对象:

jian = bob;
因此,更改
jian
名称也将更改
bob
名称

jian.name = "Jian";

执行
Student bob=new Student()
操作时,您正在创建Student类的实例,并将对该位置的引用保存在
bob
变量的内存中


当您执行
jian=bob
操作时,您正在将相同的引用保存到
jian
变量中的内存位置,因此,现在
jian
bob
指向完全相同的学生类实例。

jian
引用了
bob
对象。

您正在将bob的引用复制到jian


现在两个都指向同一个对象。

这是由于线条的缘故

jian = bob;
通过这一行,您将Jian对象的实例替换为Bob的对象。 这意味着Jian实例变成了Bob实例,但Bob实例仍然存在


因此,当您更改Jian的名称时,您在内部更改Bob的名称,正如前面所写,您的变量Bob和Jian链接到内存中的同一个对象。也就是说,对于非原语类型,当您使用=运算符时,您可以复制链接。如果需要创建另一个对象,该对象将包含以前输入数据的字段,则需要实现克隆方法。或者,您可以添加构造函数来获取参数中的对象并复制字段。 例如:

建造商:

public Student(Strudent obj){
    this.name = obj.name;
    this.age = obj.age;
}
大体上: 学生简=新生(鲍勃)


你可以找到很多解决问题的方法。使用任何你喜欢的变体。

因为
bob
jian
指的是同一个对象。谢谢大家的回答,我对他们都投了赞成票,因为他们是对的。我选择了@AnthonyGrist的答案,因为它更清晰。再次感谢!非常感谢,这是一个很好的答案,我投了更高的票
jian = bob.clone();
public Student(Strudent obj){
    this.name = obj.name;
    this.age = obj.age;
}