为什么运行出来是这样?

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:17:32
//主程序
import java.util.Vector;

public class Main {
private static Vector OldOne=new Vector();
private static Vector NewOne=new Vector();
private static ExpandListItem cc=null;

public static void main(String[] args) {
ExpandListItem ex=new ExpandListItem(false);
OldOne.addElement(ex);
ExpandListItem elItem=(ExpandListItem)OldOne.elementAt(0);
NewOne.addElement(elItem);
System.out.println(((ExpandListItem)OldOne.elementAt(0)).ifselected);

cc=(ExpandListItem)NewOne.elementAt(0);
cc.ifselected=true;
System.out.println(((ExpandListItem)OldOne.elementAt(0)).ifselected);
}

}
//另外一个类
public class ExpandListItem {
public boolean ifselected=false;
public ExpandListItem(boolean ifselected) {
this.ifselected=ifselected;
}
}

--------
从逻辑上看,我没有更改OldOne中的元素
但在运行了cc.ifselected=true之后
OldOne中的元素也被更改了,这是为什么?

因为oldOne和newOne2个容器都保存的是同一个ExpandListItem的引用,所以2者是完全一模一样的,更改了其中一个会反映到另外一个去,即使你没有重新保存

ExpandListItem ex=new ExpandListItem(false);

从头到尾只实例化了一个对象

后面的都是对该对象进行操作