Java引用对象复制



好的,这是我写的代码

 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 &2,因为我把10压入temp变量,而不是link。但是它打印的是1 2 10

这里到底发生了什么?有人能给我解释一下吗?

谢谢。

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

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

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

如果你想让temp独立于link,那么这样做:

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

现在,当你添加10到temp时,只有它在堆上的对象会看到变化。

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

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

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

相关内容

  • 没有找到相关文章