質問編集履歴

4

コードの修正

2022/10/19 03:23

投稿

minmin0222
minmin0222

スコア1

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,8 @@
2
2
  println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか?
3
3
 
4
4
  ### 試したこと
5
+
6
+ ```
5
7
  ArrayList<Integer> list1 = new ArrayList<Integer>();
6
8
  list1.add(Integer.valueOf(1));
7
9
  list1.add(Integer.valueOf(2));
@@ -16,6 +18,8 @@
16
18
  System.out.println(String.valueOf(list2));
17
19
  System.out.println(list2);
18
20
  System.out.println(Arrays.toString(list2));
21
+
22
+ ```
19
23
  出力:
20
24
  [1, 2, 3]
21
25
  [1, 2, 3]

3

コードなどの追記

2022/10/19 02:32

投稿

minmin0222
minmin0222

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,34 @@
1
1
  ### 質問
2
- println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか? 追記: コードを書いている中でprintln()にIntegerのArrayListを渡すと何故か中身の要素をプリント出来てしまったのですが、何に起因してArrayListはこの様なことが可能なのか理解ができず質問しました(例えばArrayListがまずprintln()内のtoStringに渡されてStringへ変換されて、それがプリントされている等)
2
+ println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか?
3
3
 
4
4
  ### 試したこと
5
- println()にはtoString()が内包されていること、toString()はオーバーライドされる必要があること、そしてArrayList.toString()でArrayListの要素を文字列で出力できることがわかりました。(これらが関係するのかはわかりませんが…)
5
+ ArrayList<Integer> list1 = new ArrayList<Integer>();
6
+ list1.add(Integer.valueOf(1));
7
+ list1.add(Integer.valueOf(2));
8
+ list1.add(Integer.valueOf(3));
9
+ System.out.println(String.valueOf(list1));
10
+ System.out.println(list1);
11
+ System.out.println(list1.toString());
12
+
13
+ System.out.println();
14
+
15
+ int[] list2 = {1,2,3};
16
+ System.out.println(String.valueOf(list2));
17
+ System.out.println(list2);
18
+ System.out.println(Arrays.toString(list2));
19
+ 出力:
20
+ [1, 2, 3]
21
+ [1, 2, 3]
22
+ [1, 2, 3]
23
+
24
+ [I@5a07e868
25
+ [I@5a07e868
26
+ [1, 2, 3]
27
+
28
+ 貼って下さった参考ページから、上記のlist1,list2ともにprintln(Object x)に渡されているのかと思います(配列もArrayListもオブジェクトの為)。list2の配列についてはArrays.toString()で参照値を文字列に変換しなければならない一方、ArrayListについてはクラス内でtoString()をオーバーライドしているので最初から要素を返してくれるということでしょうか。(java.util.ArrayListのソースを見たのですが、該当箇所を見つけられる程のスキルが無く申し訳ありません)
6
29
 
7
30
 
31
+ ### 質問の背景
32
+ ※コードを書いている中でprintln()にIntegerのArrayListを渡すと何故か中身の要素をプリント出来てしまったのですが、何に起因してArrayListはこの様なことが可能なのか理解ができず質問しました。
33
+
8
- 質問者の理解度について: 私は配列やクラス、オーバーロードやインターフェイスを学んだ後に現在ラッパークラスとArrayListの可変長配列、オートボクシングとアンボクシングについて学び始めた程度の初学者です。
34
+ 質問者の理解度について: 私は配列やクラス、オーバーロードやインターフェイスを学んだ後に現在ラッパークラスとArrayListの可変長配列、オートボクシングとアンボクシングについて学び始めた程度の初学者です。

2

誤字の修正

2022/10/19 00:50

投稿

minmin0222
minmin0222

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 質問
2
- println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか? 追記:I コードを書いている中でprintln()にIntegerのArrayListを渡すと何故か中身の要素をプリント出来てしまったのですが、何に起因してArrayListはこの様なことが可能なのか理解ができず質問しました(例えばArrayListがまずprintln()内のtoStringに渡されてStringへ変換されて、それがプリントされている等)
2
+ println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか? 追記: コードを書いている中でprintln()にIntegerのArrayListを渡すと何故か中身の要素をプリント出来てしまったのですが、何に起因してArrayListはこの様なことが可能なのか理解ができず質問しました(例えばArrayListがまずprintln()内のtoStringに渡されてStringへ変換されて、それがプリントされている等)
3
3
 
4
4
  ### 試したこと
5
5
  println()にはtoString()が内包されていること、toString()はオーバーライドされる必要があること、そしてArrayList.toString()でArrayListの要素を文字列で出力できることがわかりました。(これらが関係するのかはわかりませんが…)

1

質問した状況の追記

2022/10/19 00:49

投稿

minmin0222
minmin0222

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,8 @@
1
1
  ### 質問
2
- println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか?
3
-
2
+ println()に配列を渡すとそのオブジェクトへの参照がプリントされる一方で、ArrayListを渡すとtoString()を使わなくてもリストの中身がプリントされるのは何故でしょうか? 追記:I コードを書いている中でprintln()にIntegerのArrayListを渡すと何故か中身の要素をプリント出来てしまったのですが、何に起因してArrayListはこの様なことが可能なのか理解ができず質問しました(例えばArrayListがまずprintln()内のtoStringに渡されてStringへ変換されて、それがプリントされている等)
4
3
 
5
4
  ### 試したこと
6
5
  println()にはtoString()が内包されていること、toString()はオーバーライドされる必要があること、そしてArrayList.toString()でArrayListの要素を文字列で出力できることがわかりました。(これらが関係するのかはわかりませんが…)
7
6
 
7
+
8
+ ※質問者の理解度について: 私は配列やクラス、オーバーロードやインターフェイスを学んだ後に現在ラッパークラスとArrayListの可変長配列、オートボクシングとアンボクシングについて学び始めた程度の初学者です。