メソッドの戻り値を取得します

お気軽に:

私は日食で、次のコードを実行します。

ArrayList<StringBuilder> list = new ArrayList<StringBuilder>();
ArrayList<Integer> alist = new ArrayList<Integer>();

// add some elements ti list
list.add(new StringBuilder("hello"));
list.add(new StringBuilder("2"));
list.add(new StringBuilder("hi"));
list.add(new StringBuilder("this"));

// add some elements to alist
alist.add(4);
alist.add(9);


//get method
StringBuilder a = list.get(3);
a.append(" is a good day");
int b = alist.get(1);
b = 7;

// print the list
System.out.println("LinkedList:" + list);
System.out.println("ArrayList:" + alist);

その結果はこちら

LinkedList:[hello, 2, hi, this is a good day]
ArrayList:[4, 9]

これは、getメソッドは、A(のStringBuilderの場合)リスト要素の浅いコピーを返すように見えますが、Bに(整数の場合)ディープコピーを返します!なぜそれが起こったのか?getメソッドは、リストの要素の深いか浅いコピーを返すのですか?

彼らは次のとおりでした:

getリターンを参照するList要素ではなく、コピー(深いも浅いもありません)。

最初のスニペットでは、変数が参照するオブジェクトを変異さaせ、Listまた影響されます。

StringBuilder a = list.get(3);
a.append(" is a good day");

第二のスニペットでは、変数に新しい値を割り当てるbには影響しません、List

int b = alist.get(1);
b = 7;

第二として動作するようにあなたの最初のスニペットためには、次のように記述する必要があります。

StringBuilder a = list.get(3);
a = new StringBuilder(" is a good day");

およびList影響を受けることはありません。

他の方法では、最初のような第2のスニペットの振る舞いをすることはできません。あなたが割り当てられている場合でもListに要素をInteger変数以来、あなたは、それを変異する任意のメソッドを呼び出すことはできませんInteger不変です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=205358&siteId=1