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では値によって渡されます。ただし、渡すのはオブジェクトではなく、オブジェクトへの参照です。これは、参照を渡すときにキュー全体のコピーが作成されるのではなく、参照のコピーのみが作成されることを意味します。新しく作成された参照は引き続き同じオブジェクトに属しているため、を実行するqueue.add()と、要素が実際のオブジェクトに追加されます。一方、関数内の参照を再割り当てしてもqueue = new LinkedLIst<String>()、呼び出し元の関数内の参照には影響しませんでした。

于 2012-04-08T21:21:45.563 に答える
1

オブジェクトは、Javaでは参照によって渡されます。プリミティブタイプのみが値によって渡されます。

于 2012-04-08T21:18:33.800 に答える
0

キューのコピーを渡すのではなく、キュー自体を渡します。したがって、変更すると、変更はcustomize呼び出しに限定されず、すべてに影響します。

于 2012-04-08T21:20:19.447 に答える