我正在准备认证考试,但我不理解此代码:
主要:
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
不再指向已分配并分配给Student
的jian
对象,它与bob
相同,从而为同一对象创建别名。现在,原始的jian
已丢失,无法恢复,有资格进行垃圾回收。以下的评估
jian.name = "Jian";
通过其
bob
别名覆盖jian
变量中的名称,从而导致看到的结果。