Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

いつclone()を使うべきか?

String A = "1";
String B = A;
A="2";

この結果、B = "1"のままです。しかし、Stringの代わりに例えば、ArrayListだった場合、

ArrayList A = new ArrayList(1);
A.add("1");
ArrayList B = new ArrayList();
B = A;
A.remove(1);

とすると、Bの値も変わってしまいます。cloneしてから使わないといけないですよね。なぜ、StringとArrayListで違うのでしょうか。

4

回答

79151

閲覧

4件の回答

評価

0

上のStringと同じことをしたいのなら、

ArrayList A = new ArrayList();
A.add("1");
ArrayList B = A;
A = new ArrayList();
A.add("1");
A.remove("1");

になりますよ。

評価

0

ありがとうございます。

それは何とかやればできると思いますが、新しいクラスを使い始めるときに、それが(この質問にある意味において)StringとArrayListのどっちと「同じ」なのか分からないので、少し心配です。全部一々チェックするものなのでしょうか。

評価

0

オブジェクトの参照を理解すれば、謎が解けます。

評価

0

>それは何とかやればできると思いますが、
そうではなく、ふたつのコード(StringとArrayList)が同じことをしていない、ということです。
StringのときはAを作り、Bにコピーし、A自体を置き換えているのに、
ArrayListではAを作り、Bにコピーし、Aの中身を置き換えています。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。