java - 将对象存储在对象数组中

标签 java oop object

基本上我想将学生添加到类(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/

相关文章:

java - 递归算法中的无限循环

java - 如何将 Spinner 中的数据转换为 API 可以使用的格式?

oop - Fortran:指向方法的过程指针

perl - 这是 Moose Perl 的一个很好的替代品吗?

javascript - 使用私有(private)成员复制 javascript 对象

c++ - 使用另一个类的函数指针

javascript - 使用 stringify 将对象设置和获取到本地存储?

java - JMeter如何确认最大吞吐量?

java - 带有授权 header 的 AngularJS CORS

java - 如何摆脱 this() 构造函数中的长调用?