では、toString / deepToString の理解を深めるために、配列構造を図解で可視化した教材 を作ります。
初心者でも 「配列の中身がどう格納されているか」「toString と deepToString の違い」 が直感的にわかるように整理します。
1. 1次元配列の表示(超基礎)
コード例
int[] nums = {10, 20, 30};
System.out.println(Arrays.toString(nums));
Java図解イメージ
nums -> [ 10 | 20 | 30 ]
✅ 出力:
[10, 20, 30]
Arrays.toStringは 1次元配列の中身を展開して文字列化System.out.println(nums)は参照を表示 →[I@xxxxxx
2. 2次元配列の表示(基礎〜中級)
コード例
int[][] matrix = {
{1, 2},
{3, 4}
};
System.out.println(Arrays.toString(matrix));
System.out.println(Arrays.deepToString(matrix));
Java配列構造
matrix
├─ row0 -> [1, 2]
└─ row1 -> [3, 4]
出力
Arrays.toString(matrix)→[[I@xxxx, [I@yyyy](参照が出る)Arrays.deepToString(matrix)→[[1, 2], [3, 4]](中身を展開)
3. ジャグ配列(行ごとに長さが違う)
コード例
int[][] jagged = {
{1},
{2,3},
{4,5,6}
};
System.out.println(Arrays.deepToString(jagged));
Java図解
jagged
├─ row0 -> [1]
├─ row1 -> [2, 3]
└─ row2 -> [4, 5, 6]
✅ 出力:
[[1], [2, 3], [4, 5, 6]]
- deepToString は 行ごとに展開して文字列化
- toString では参照
[I@xxxxのまま
4. 3次元配列の表示(応用)
コード例
int[][][] cube = {
{
{1, 2},
{3, 4}
},
{
{5, 6},
{7, 8}
}
};
System.out.println(Arrays.deepToString(cube));
Java図解
cube
├─ layer0
│ ├─ row0 -> [1,2]
│ └─ row1 -> [3,4]
└─ layer1
├─ row0 -> [5,6]
└─ row1 -> [7,8]
✅ 出力:
[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
- 階層ごとに展開される
- deepToString でない場合、内側配列は参照
[I@xxxxのまま
5. 混合型配列(Object[])
コード例
Object[] mixed = {
new int[]{1,2},
new String[]{"A","B"},
"Hello"
};
System.out.println(Arrays.deepToString(mixed));
Java図解
mixed
├─ element0 -> int[]{1,2} -> [1,2]
├─ element1 -> String[]{"A","B"} -> [A,B]
└─ element2 -> "Hello"
✅ 出力:
[[1, 2], [A, B], Hello]
- deepToString は Object 内の配列も自動で展開
- 文字列はそのまま
"Hello"として表示
6. まとめ:toString と deepToString の違い
| 配列の種類 | toString 出力 | deepToString 出力 |
|---|---|---|
| 1次元配列 | [10, 20, 30] | [10, 20, 30] |
| 2次元配列 | [I@xxxx, [I@yyyy] | [[1, 2], [3, 4]] |
| ジャグ配列 | [I@xxxx, [I@yyyy] | [[1], [2,3], [4,5,6]] |
| 3次元配列 | [I@xxxx, [I@yyyy] | [[[1,2],[3,4]],[[5,6],[7,8]]] |
| Object[] 内配列 | [I@xxxx, [Ljava.lang.String;@yyyy, Hello] | [[1,2],[A,B],Hello] |
💡 ポイント整理
- toString は 1次元配列のみ展開
- deepToString は多次元配列も階層的に展開
- 空配列や null も deepToString なら分かりやすく表示
- Object[] 内にプリミティブ配列がある場合も deepToString が便利
