Java参考对象复制

时间:2016-09-12 19:29:15

标签: java object linked-list

好的,这是我写的代码

 public void Print( Object obj ){
    System.out.println( obj.toString() );
}

public Main() {

    LinkedList<Integer> link = new LinkedList<Integer>();
    LinkedList<Integer> temp = link;

    link.push(1);
    link.push(2);
    temp.push(10);

    while( link.isEmpty() == false ){
        Print( link.getLast() );
        link.removeLast();
    }
}

我想它应该打印1&amp; 2因为我将10推入temp变量,而不是链接。但它打印1 2 10。

这里到底发生了什么?任何人都可以向我解释这个吗?

感谢。

2 个答案:

答案 0 :(得分:3)

Java只有原始和引用变量类型。你的变量

LinkedList<Integer> link = new LinkedList<Integer>(); // reference to a list
LinkedList<Integer> temp = link; // another reference to the same list.

您只创建了一个new LinkedList,因此无论您使用一个引用还是另一个引用,您仍然只有一个列表。

答案 1 :(得分:3)

您需要了解Java引用是什么。它们指向生活在堆上的对象。

LinkedList<Integer> link = new LinkedList<Integer>();
LinkedList<Integer> temp = link;

当您将temp设置为等于link时,您将等同于引用。两者都指向堆上的同一个对象。如果使用任一引用修改对象,另一个也可以看到它。

如果您希望temp独立于链接,请执行以下操作:

List<Integer> link = new LinkedList<Integer>();
List<Integer> temp = new LinkedList<Integer>(link);

现在,当您向temp添加10时,只有堆上的对象才会看到更改。