リンクされたリストを格納する L という名前のリンクされたリストがあるとします。
LinkedList <LinkedList<String>> L
もしそうなら、それL1 = L.getLast()
は最後のリストに「何か」を追加するL.getLast.add("something")
かL1.add("something")
、それともそのリストのローカルインスタンスのみに追加しますか?
リンクされたリストを格納する L という名前のリンクされたリストがあるとします。
LinkedList <LinkedList<String>> L
もしそうなら、それL1 = L.getLast()
は最後のリストに「何か」を追加するL.getLast.add("something")
かL1.add("something")
、それともそのリストのローカルインスタンスのみに追加しますか?
それは最後のリストに「何か」を追加しますか、それともそのリストのローカルインスタンスのみに追加しますか?
2 つの参照 (インスタンスではない) が指す同じリストに追加するため、両方のコード行は同じように機能します。
与えられた
LinkedList <LinkedList<String>> L
次の 2 つのフラグメントはまったく同じように機能します
最後のノードを指すローカル参照(あなたが書いたインスタンスとは呼ばれません)を持っています。
L1 = L.getLast()
L1.add("something")
ローカル参照はありませんが、外部に格納されている参照を使用していますLinkedList L
L.getLast.add("something")
「そのリストのローカルインスタンス」とはどういう意味ですか? ここでは参照型を扱っています。外側のリストに格納されているのは、単にリストのインスタンスへの参照です。最後の要素を取得すると、参照のコピーが取得されます。オブジェクトにどのようにアクセスするかは問題ではありません。その単一のオブジェクトを変更しているだけです。
を作成することで、例を必要以上に複雑にしましたLinkedList<LinkedList<String>>
が、基本的に、これは で簡単に実証できるのと同じ問題StringBuilder
です。
StringBuilder x = new StringBuilder();
StringBuilder y = x; // Copies the *reference*, not an object
y.append("foo");
System.out.println(x); // Prints "foo"
繰り返しますが、単一のStringBuilder
オブジェクトがあり、両方の値x
とy
は同じオブジェクトへの参照です。変更方法は問題ではありません。変更は表示されますが、その後オブジェクトにアクセスします。
または、例としてリストを使用する場合:
List<String> list1 = new ArrayList<String>();
List<String> list2 = list1;
list1.add("help");
System.out.println(list2.size()); // Prints 1
これは、Java を理解する上で非常に重要です。すべてのクラスが同じように機能します。式の値は決してオブジェクトではありません。常に参照またはプリミティブ値のいずれかです。
L1 と l.getLast() はどちらも同じオブジェクト (親リンク リストの最後) を参照します。
L1.addLast("something") または l.getlast().addlast("something") を使用すると、最後のリストの最後に「something」が追加されます。