java - 当我重新初始化 vector 时,为什么它保留其值

标签 java

在下面的类中,我将一个字符串添加到 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,因此此时该对象有两个引用者:

  1. v2[0]
  2. v3
<小时/>

我会尝试画一些粗略的图像来演示这一点,但我认为从 Java 教程中阅读有关对象和引用的页面会更容易:

http://download.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

关于java - 当我重新初始化 vector 时,为什么它保留其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760022/

相关文章:

java - 关于过滤 Jsoup 元素的 IntelliJ 警告

java - 编程记事本 - 使用 Java 打开新文件

java - 在 Scala 中使用通用基元数组

java - 如何通过编码将特定的 .java 转换为 .class?

java - 嵌套在泛型类中的私有(private)类也应该是泛型吗?

java - JAXB 解码错误

java - 如何使两个矩形相交时的增量可预测?

java - 在 OpenGL 中使用十六进制颜色

java - 如何将 HTML 元素设置到 session grails 中

java - 我对基本 Java 小程序的第一次尝试失败了。我不明白为什么矩形不动