什么是浅表副本?

问题描述 投票:1回答:3

我创建了一个构造函数,据我的教授说,我违反了封装,说构造函数中存在浅表副本。我正在写这个问题,希望我能看到我做错了什么。因为老实说我不知道​​这是什么,因为我的字段是私有的,所以我也创建了getter和setter(未显示)。

代码:

public class Class {
    private int difficultyLevel;
    private String subject;
    private List<Student> students;

    public Class(final int theLevel, final String theSubject,
        final List<Student> theStudents) {
    if (theLevel < 0 || theSubject.length() == 0) {
        throw new IllegalArgumentException();
    }
    if (theSubject == null || theStudents == null) {
        throw new NullPointerException();
    }
    difficultyLevel = theLevel;
    subject = theSubject;
    students = new ArrayList<Student>(theStudents);

}

非常感谢!

java encapsulation shallow-copy
3个回答
3
投票

“浅拷贝是指您在数据结构中复制对象的引用,而不是复制对象本身并保存它们的副本(深层副本)。在这种情况下,我想他是在谈论一系列学生。他可能希望您保存每个学生(新学生)的副本数组]


1
投票

您只是将引用或地址指向旧对象,这就是浅表副本所做的。只需尝试执行深层复制,它将在您的项目中创建一个新的内存空间,并且两者都将在内存中拥有自己的存在,而不仅仅是引用。


0
投票

java中的浅表复制意味着您只是在创建一个指向旧对象值存储位置的新对象。换句话说,浅拷贝可以称为参考拷贝。在浅表复制中,对象的堆栈内存将不同,而堆内存相同。因此,您将拥有两份副本,但是对另一份所做的任何更改也可以在另一份上看到。

© www.soinside.com 2019 - 2024. All rights reserved.