好的,这是我写的代码
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,因此无论您使用一个引用还是其他引用,您仍然有一个列表。