Class A {
Vector v;
public Vector getV() {
v = new Vector();
for(int i = 0; i < 10; i++)
v.addElement(i);
}
}Class B {
private A a;
public B () {
a = new A();
}
public void test() {
Vector v1 = new Vector();
Vector v2 = new Vector();
v1 = a.getV();
v2 = a.getV(); //此时两个Vector的地址都是一个
//如果接下来我对v1进行修改,必然会影响到v2;
//请问如何才能在上面得到两个不同的v1,v2。地址不同,但内容相同,都是a.v;
}
}
//如何克隆
Vector v;
public Vector getV() {
v = new Vector();
for(int i = 0; i < 10; i++)
v.addElement(i);
}
}Class B {
private A a;
public B () {
a = new A();
}
public void test() {
Vector v1 = new Vector();
Vector v2 = new Vector();
v1 = a.getV();
v2 = a.getV(); //此时两个Vector的地址都是一个
//如果接下来我对v1进行修改,必然会影响到v2;
//请问如何才能在上面得到两个不同的v1,v2。地址不同,但内容相同,都是a.v;
}
}
//如何克隆
第一:getV() 根本没有return任何对象,肯定编译不过去
第二: Vector v;没有构造函数没有参数,而且是类成员,则会自动初始化,不用再在构造函数里初始化了。如果你想clone的话,则只需重载clone这个函数就可以了
任何对象都有clone()这个函数,想返回这个对象的clone(),就return o.clone();
想要了解更多,看看thinking in java就好了
jdk中关于Vector的clone方法已经写的很清楚啦
Returns a clone of this vector. The copy will contain a reference to a clone of the internal data array, not a reference to the original internal data array of this Vector object.
完全同意