【发布时间】:2013-05-28 11:19:19
【问题描述】:
我正在用 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 中,以便该数组不会干扰我的原始数据?这个程序真的有必要吗?或者这种情况不太可能发生?
谢谢
【问题讨论】:
-
传递参数是 java 的关键。您的调用 c.addStu() 只是传递对您的学生对象的引用。因此,您的对象仍然是相同的,并且绝对不依赖于使用哪个特定引用来进行实际的对象操作,结果将永远相同,因为只有一个对象。创建对象的副本是解决问题的好方法。看看这篇文章:en.wikipedia.org/wiki/Clone_%28Java_method%29