基本上我想将学生添加到类(class)列表中。假设我有以下代码
public class ClassList {
//Constructor methods...
private Student [] studList = new Student [20];
public boolean addStudent (Student newStudent)
{
studList[14] = newStudent;
}
}
studList[14] 是否添加对 newStudent 对象的引用或将该对象复制到 StudList[14] 学生对象中?
据我了解,当第二次调用方法 addStudent() 时,newStudent 对象将被删除。那么studList[14]会指向null吗?如果我希望 StudList[14] 在整个代码执行过程中持续存在怎么办?
抱歉,如果很难理解,我不知道如何更容易地解释我的查询...
最佳答案
Java 中有一条您必须牢记的基本规则:
访问对象的唯一方式是通过其引用。变量可以保存的唯一值是引用(*)。对于局部变量、参数、实例字段和静态字段来说也是如此:它们在这方面都是相同的。
对象本身永远不会“包含”在变量中。
这直接引出了您第一个问题的答案:
引用被复制到数组中(因为数组只能保存引用(*),而不能对象)。
这也意味着“newStudent
被删除”实际上并不是什么大问题:它只是对同一对象的另一个引用,如果它消失了,也不会发生什么事情。
现在,如果对给定对象的所有引用都被删除(或不再可达),那么该对象本身就有资格进行垃圾回收,但这并不是一件坏事,因为您无法访问无论如何,不再这样了。
(*) ...或原始值,但我们将在本次讨论中忽略它们。
关于java - 将对象存储在对象数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19701278/