gpt4 book ai didi

java - 如何将一个对象数组复制到另一个数组?

转载 作者:行者123 更新时间:2023-12-01 18:48:03 25 4
gpt4 key购买 nike

我正在用 Java 创建一个简单的对象数组,我的部分代码如下

public class Student{
private String name;
private double score;
public Student(String name){
this.name=name;
this.score=score
}

public class Classroom{
private Student[] listStu;
private int sc;
public addStu(Student stu){
listStu[sc]=stu;
sc++;
}
public Student[] getClassroom(){
return listStu;
}
public int getNum(){
return sc;
}
public printList(){
for (int i=0;i<sc;i++){
System.out.pritnln(listStu[i].getName());
}
}

在主类中我编写了这个:

Classroom c=new Classroom();
Student[] stuList;
int nStu;
Student s1=new Student("michael",3.0);
Student s2=new Student("larry",4.0);
c.addStu(s1);
c.addStu(s2);
stuList=c.getClassroom();
nStu=c.getNum();

问题是当我在主类中修改类 StuList 的对象时,例如:

stuList[0].setName("peter");

当我调用 printList 方法时,我发现数组中的数据也被修改了(在我的例子中,“michael”的名字被“peter”更改了)。我的问题是如何将对象数组复制到主类的 StuList 中,以便该数组不会干扰我的原始数据?这个程序真的有必要吗?或者这种情况不太可能发生?

谢谢

最佳答案

通常您会使用List<Student>而不是编写自己的集合,但是问题是相同的。您有一个数组的浅副本,您似乎需要一个深副本。您需要使用包含相同信息的新 Student 对象创建一个新数组,而不是引用该数组。

显然,这是乏味且缓慢的,一般建议是避免更改从集合中获取的任何集合(例如数组)。即使用 setName 是一个坏主意,除非“Michael”已将他的名字更改为“Peter”。如果您想用 Peter 替换 michael,您有一个 enw Student,并且应该替换旧的 Student 引用。

关于java - 如何将一个对象数组复制到另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16877559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com