質問
println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか?
試したこと
ArrayList<Integer> list1 = new ArrayList<Integer>(); list1.add(Integer.valueOf(1)); list1.add(Integer.valueOf(2)); list1.add(Integer.valueOf(3)); System.out.println(String.valueOf(list1)); System.out.println(list1); System.out.println(list1.toString()); System.out.println(); int[] list2 = {1,2,3}; System.out.println(String.valueOf(list2)); System.out.println(list2); System.out.println(Arrays.toString(list2));
出力:
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
[I@5a07e868
[I@5a07e868
[1, 2, 3]
貼って下さった参考ページから、上記のlist1,list2ともにprintln(Object x)に渡されているのかと思います(配列もArrayListもオブジェクトの為)。list2の配列についてはArrays.toString()で参照値を文字列に変換しなければならない一方、ArrayListについてはクラス内でtoString()をオーバーライドしているので最初から要素を返してくれるということでしょうか。(java.util.ArrayListのソースを見たのですが、該当箇所を見つけられる程のスキルが無く申し訳ありません)
質問の背景
※コードを書いている中でprintln()にIntegerのArrayListを渡すと何故か中身の要素をプリント出来てしまったのですが、何に起因してArrayListはこの様なことが可能なのか理解ができず質問しました。
質問者の理解度について: 私は配列やクラス、オーバーロードやインターフェイスを学んだ後に現在ラッパークラスとArrayListの可変長配列、オートボクシングとアンボクシングについて学び始めた程度の初学者です。
回答3件
あなたの回答
tips
プレビュー