在下面的类中,我将一个字符串添加到 Vector(v1),然后将该 Vector(v1) 添加到新的 Vector(v2)。然后我重新初始化 Vector v1。
java 如何保留对 v1 的引用?当我重新初始化 v1 时,java 是否在幕后维护引用?
下面的输出是“1”。
public class VectorTest {
public static void main(String args[]){
new VectorTest().testVector();
}
private void testVector(){
Vector v1 = new Vector();
Vector v2 = new Vector();
v1.add("1");
v2.add(v1);
v1 = new Vector();
Vector v3 = (Vector)v2.get(0);
System.out.println(v3.elementAt(0));
}
}
最佳答案
private void testVector(){
Vector v1 = new Vector(); // v1 references some vector created on the heap
Vector v2 = new Vector();
v1.add("1"); // vector referenced by v1 gets a "1" added
v2.add(v1); // make v2[0] the second referrer to that Vector you created
v1 = new Vector(); // Change what v1 refers to, this is not the same as destroying the original Vector
// v2[0] still holds a reference to the original vector
Vector v3 = (Vector)v2.get(0); // v3 is now another referrer to the same vector
System.out.println(v3.elementAt(0));
}
您正在更改 v1
所指的内容,在本例中为其他Vector
。但 v2
仍然保留对原始 Vector
的引用。
Java 中的对象可以有多个引用它的变量。 Vector
对象也是可变的,这意味着如果它的引用者之一修改它,就像您所做的那样:
v1.add("1");
然后,所有其他引荐来源网址现在都将引用其中包含 “1”
的同一 vector 。
您还可以更改变量引用的对象,就像在这里所做的那样:
v1 = new Vector();
因此,在发生这种情况之后,v1
持有对不同 Vector
对象的不同引用,而 v2[0]
(请原谅数组符号) )仍然保留对您在开始时创建并分配给 v1
的原始 Vector
的引用。
Vector v3 = (Vector)v2.get(0);
当您执行此操作时,您将让 v3
引用您在开始时创建的同一个 Vector
,因此此时该对象有两个引用者:
v2[0]
v3
我会尝试画一些粗略的图像来演示这一点,但我认为从 Java 教程中阅读有关对象和引用的页面会更容易:
http://download.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
关于java - 当我重新初始化 vector 时,为什么它保留其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760022/