teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

参考URL追加

2016/05/12 02:38

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  配列の要素に使っている型同士に継承関係があるなら、配列を別の型の配列に代入することはできます。
2
- しかし、これはあくまで「この配列、A型が入っているんだからその親クラスのB型としても使えるね」という理由で入れているに過ぎません。(蛇足ですが、これはタイプセーフではなくなり、Javaの失敗とも言われている)
2
+ しかし、これはあくまで「この配列、A型が入っているんだからその親クラスのB型としても使えるね」という理由で入れているに過ぎません。(蛇足ですが、これはタイプセーフではなくなり、Javaの失敗とも言われている→参考:[Java配列メモ | 共変](http://www.ne.jp/asahi/hishidama/home/tech/java/array.html#h2_covariant))
3
3
 
4
4
  int配列は仰るとおりプリミティブの値が入っており、このままではIntegerというオブジェクトとして扱うことはできません。オートボクシングではオブジェクトを要求されている所にint値が渡ると自動でオブジェクトに変換させて事なきを得ているのですが、intの配列に入っているint値をIntegerに変換しても、**intの配列にIntegerを入れることができません。**そのため、別個にIntegerの配列を新たに作成する必要が生まれます。
5
5
 

1

細かい編集

2016/05/12 02:38

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,8 +1,10 @@
1
1
  配列の要素に使っている型同士に継承関係があるなら、配列を別の型の配列に代入することはできます。
2
2
  しかし、これはあくまで「この配列、A型が入っているんだからその親クラスのB型としても使えるね」という理由で入れているに過ぎません。(蛇足ですが、これはタイプセーフではなくなり、Javaの失敗とも言われている)
3
3
 
4
- int配列は仰るとおりプリミティブの値が入っており、このままではIntegerというオブジェクトとして扱うことはできません。オートボクシングではint値受け取に自動でオブジェクトに変換させて事なきを得ているのですが、intの配列に入っているint値をIntegerに変換しても、**肝心の配列Integerを入れることができません。**そのため、別個にIntegerの配列を新たに作成する必要が生まれます。
4
+ int配列は仰るとおりプリミティブの値が入っており、このままではIntegerというオブジェクトとして扱うことはできません。オートボクシングではオブジェクト要求されていint値が渡ると自動でオブジェクトに変換させて事なきを得ているのですが、intの配列に入っているint値をIntegerに変換しても、**intの配列Integerを入れることができません。**そのため、別個にIntegerの配列を新たに作成する必要が生まれます。
5
5
 
6
- しかし、そもそものことを思い出して欲しいのですが、オブジェクトに対して"="は参照の代入を意味します。ということは、参照の代入をして2つの配列オブジェクトは同じものを指すはずなのに、違う配列を作成して別のオブジェクトを作成しなければならないというのは整合性が取れません。そもそもただの代入で新たに配列を作成するほどJavaはおせっかいではありません。
6
+ しかし、そもそものことを思い出して欲しいのですが、オブジェクトに対して"="は参照の代入を意味します。ということは、参照の代入をして2つの配列変数は同じ配列オブジェクトを指すはずなのに、違う配列を作成して別のオブジェクトを作成しなければならないというのは整合性が取れません。そもそもただの代入で新たに配列を作成するほどJavaはおせっかいではありません。
7
7
 
8
+ 同じ理由で、Integer配列をint配列に変換させようとしてIntegerをアンボクシングしてintにしても、Integerというオブジェクトを扱う配列にint値を置くことができないため、変換できません。
9
+
8
10
  以上の理由で、int配列⇔Integer配列の変換は認められていないのだと思います。