Class TableEntity{
private Vector menu; public void setMenu(Vector menu){ this.menu=menu;}
public Vector getMenu(){ return menu;}
}
MenuEntity是自己写的一个类
......
Vector o=new Vector();
MenuEntity x1=new MenuEntity();
MenuEntity x2=new MenuEntity();
MenuEntity x3=new MenuEntity();
o.addElement(x1);
o.addElement(x2);
o.addElement(x3);
TableEntity tt=new TableEntity();
tt.setMenu(o);
o.removeAllElements();
System.out.println(o.size());
Vector xs=tt.getMenu();
System.out.println(xs.size());.....
这样输出的是0,0
如果把o.removeAllElements()改成o=new Vector()的话输出是0,3
为什么会出现这种情况,removeAllElements为什么会把已经set进其他类的menu的也清0了,实在是想不明白
private Vector menu; public void setMenu(Vector menu){ this.menu=menu;}
public Vector getMenu(){ return menu;}
}
MenuEntity是自己写的一个类
......
Vector o=new Vector();
MenuEntity x1=new MenuEntity();
MenuEntity x2=new MenuEntity();
MenuEntity x3=new MenuEntity();
o.addElement(x1);
o.addElement(x2);
o.addElement(x3);
TableEntity tt=new TableEntity();
tt.setMenu(o);
o.removeAllElements();
System.out.println(o.size());
Vector xs=tt.getMenu();
System.out.println(xs.size());.....
这样输出的是0,0
如果把o.removeAllElements()改成o=new Vector()的话输出是0,3
为什么会出现这种情况,removeAllElements为什么会把已经set进其他类的menu的也清0了,实在是想不明白
其实JAVA跟C也一样的,对于对象来说,都有一个句柄的,楼主的代码中 o就是Vector对象的一个句柄,当你把它Set到了TableEntity类中,等于将这个对象又找了一个句柄,这两个句柄指向的是同一个东西,当你修改了对象中的内容时,两个句柄显示出来的东西当然是一样的。
而通过o=new Vector()来新生成一个vector的话,就相当于分别存储了两个独立的数据,内存地址也不一样,所以可以分别控制