好的,这是我写的代码
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。
这里到底发生了什么?任何人都可以向我解释这个吗?
感谢。
答案 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时,只有堆上的对象才会看到更改。