0

我有一个非常小的程序:

    public static void main(String[] args) {

Queue<String> queue = new LinkedList<String>();
queue.add("one");
queue.add("two");
queue.add("tree");

printQueue(queue);
customizeQueue(queue);
printQueue(queue);
}

private static void customizeQueue(Queue<String> queue) {
queue.add("four");
queue.add("five");
printQueue(queue);
}

private static void printQueue(Queue<String> queue) {
for(String s: queue){
    System.out.print(s + " ");
}
System.out.println();
}

我期待输出:

one two tree
one two tree four five
one two tree

但是我得到:

one two tree
one two tree four five
one two tree four five

我不确定为什么会这样。我是否传递了 LinkedList 实例的引用?有人可以澄清为什么我没有得到预期的输出。

4

3 回答 3

4

所有类型在 Java 中都是按值传递的。但是,您传递的不是对象,而是对对象的引用。这意味着在传递引用时不会创建整个队列的副本,而只会创建引用的副本。新创建的引用仍然属于同一个对象,因此当您执行 a 时queue.add(),元素会添加到真实对象中。另一方面,重新分配函数queue = new LinkedLIst<String>()中的引用对调用函数中的引用没有影响。

于 2012-04-08T21:21:45.563 回答
1

Java中的对象是通过引用传递的。只有原始类型是按值传递的。

于 2012-04-08T21:18:33.800 回答
0

您不是在传递队列的副本,而是在传递队列本身。因此,当它被修改时,更改不仅限于自定义调用,而是影响一切。

于 2012-04-08T21:20:19.447 回答