什么是浅拷贝?
What is shallow copy?
我创建了一个构造函数,据我的教授说,我违反了封装,说构造函数中有一个浅拷贝。我正在写这个问题,希望我能看到我做错了什么。因为我真的不知道它是什么,因为我的字段是私有的,而且我还创建了 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);
}
非常感谢您!
浅拷贝是指在数据结构中复制对象的引用,而不是复制对象本身并保存它们的副本(深拷贝)
在这种情况下,我猜他是在谈论学生的阵列。他可能想让你保存每个学生(新学生)的副本的数组
您只是将引用或地址指向旧对象,这就是浅拷贝所做的。
尝试执行深拷贝,它会在你的项目中创建一个新的内存space,并且两者都将在内存中有自己的存在,而不仅仅是引用。
java 中的浅拷贝意味着您只是创建一个指向旧对象值存储位置的新对象。
换句话说,浅拷贝可以说是参考拷贝。
在浅拷贝中,对象将在堆栈中具有不同的内存,但在堆中具有相同的内存。因此,您将拥有两份副本,但对一份应用的任何更改也可以在另一份上看到。
我创建了一个构造函数,据我的教授说,我违反了封装,说构造函数中有一个浅拷贝。我正在写这个问题,希望我能看到我做错了什么。因为我真的不知道它是什么,因为我的字段是私有的,而且我还创建了 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);
}
非常感谢您!
浅拷贝是指在数据结构中复制对象的引用,而不是复制对象本身并保存它们的副本(深拷贝) 在这种情况下,我猜他是在谈论学生的阵列。他可能想让你保存每个学生(新学生)的副本的数组
您只是将引用或地址指向旧对象,这就是浅拷贝所做的。
尝试执行深拷贝,它会在你的项目中创建一个新的内存space,并且两者都将在内存中有自己的存在,而不仅仅是引用。
java 中的浅拷贝意味着您只是创建一个指向旧对象值存储位置的新对象。 换句话说,浅拷贝可以说是参考拷贝。 在浅拷贝中,对象将在堆栈中具有不同的内存,但在堆中具有相同的内存。因此,您将拥有两份副本,但对一份应用的任何更改也可以在另一份上看到。