我正在准备认证考试,但我不理解此代码:

主要:

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);
    }
}


类:

public class Student {
    public String name = "";
    public int age = 0;
    public String major = "Undeclared";
}


为什么会输出“鲍勃的名字:简”?

Bob.name从未设置为Jian。显然是因为“ jian = bob;”但我认为这只会将jian变量设置为与bob相同。这个概念叫什么,在Java教程中它在哪里解释?

最佳答案

Java中的分配不复制对象,而是复制引用。完成这项作业

jian = bob;


您的jian不再指向已分配并分配给Studentjian对象,它与bob相同,从而为同一对象创建别名。现在,原始的jian已丢失,无法恢复,有资格进行垃圾回收。

以下的评估

    jian.name = "Jian";


通过其bob别名覆盖jian变量中的名称,从而导致看到的结果。

10-04 15:09