Java:对象字段赋值

时间:2013-12-19 13:34:18

标签: 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.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);
    }
}

这将打印:

  

Bob的名字:Jian

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

7 个答案:

答案 0 :(得分:3)

此行会导致jianbob指向相同的对象:

jian = bob;

因此更改jian名称也会更改bob名称。

jian.name = "Jian";

答案 1 :(得分:2)

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

当您执行jian = bob时,您将jian变量中的内存位置保存为相同的引用,因此现在jianbob指向完全相同的Student类实例

答案 2 :(得分:2)

Student bob = new Student();
Student jian = new Student();
// you've created two objects and two references 
bob.name = "Bob"; // bob's name is now Bob
bob.age = 19; // bob's age is now 19
jian = bob; // the jian reference is now referring to the same object as bob
jian.name = "Jian"; // jian and bob are now referring to an object whose name is changed to Jian
System.out.println("Bob s Name: " + bob.name);

答案 3 :(得分:2)

Jian引用了bob对象。

答案 4 :(得分:2)

你正在将bob的引用复制到jian。

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

答案 5 :(得分:2)

由于行

而分配
jian = bob;

使用此行,您可以使用Bob的Object替换Jian的Object实例。 这意味着Jian实例成为Bob实例,但Bob实例保持存在。

因此,当您更改Jian的名称时,在内部更改Bob的名称

答案 6 :(得分:1)

如前所述,你的变量bob和jian链接到内存中的同一个对象。也就是说,当你使用=运算符时,对于非原始类型,你可以复制链接。如果您需要创建包含先前输入数据的字段的anoter对象,则需要实现克隆方法。或者,您可以添加构造函数,将对象放入参数中并复制字段。 例如:

jian = bob.clone();

About this on wikipedia

构造函数:

public Student(Strudent obj){
    this.name = obj.name;
    this.age = obj.age;
}

主要:     学生jian =新学生(bob);

你可以找到解决问题的许多变种。使用您喜欢的任何变体。