スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Integer[]型(ラッパクラス配列)について

あ、Javaについて書くの初めてじゃん。びっくり。
僕がRPGのキャラクターならデフォルト装備はJavaです。
Javaが一番好きです。
Project Lambda以前だとラムダ使えなくて無名インスタンス使うことになるのも、
JavaFX以前だと(JavaFX使ったことないけど)GUIアプリケーションを作る場合コード量がえげつないことになるのも、
全て許容して「好き」だと言えます!

Javaちゃんまじ天使。
俺の心にフォーリンラブ…、愛して私の例外安全…Oh, Year...


本題
  1. ラッパクラス配列と基本型配列の非互換について
  2. ラッパクラス配列をnewで確保した場合

小話です。
当たり前のことを当たり前のように語るので、ソウルジェムの濁りに注意しつつ閲覧してください。
見てってね!


1. ラッパクラス配列と基本型配列の非互換について
Integer[] wNums = new Integer[2];
int[] pNums = wNums; // もちろんコンパイルエラー

int[] pNums = (int[])wNums;  // コンパイルエラー


関係ないですがもちろん
wNums[0] = new Integer(10);
int num = wNums[0];

は通ります、自動的にアンボクシングがかかってますので。
いいですよね、オートアンボクシング。
以上。

2.ラッパクラス配列をnewで確保した場合
上でもちょっと利用していますが、
Integer配列を確保した場合は各配列要素もnewで領域確保しなければいけないようです。
Integer[] wNums = new Integer[2];
wNums[0] = 10; // ぬるぽ

みんな大好きぬるぽさん、ことNullPointerExceptionが送出されます。
これだとオートボクシングが働いてないんですかね、不思議です。
もちろんこれだとオートボクシングが働きます。
Integer num = 10;

不思議ですねー。
配列オブジェクト化した時点で一般的なクラス配列オブジェクトと同じ解釈をされてしまうんでしょうか。


そしてそして、もちろん一々newするのは面倒ですので、あらかじめ領域を確保しておけばおっけーです。
Integer[] wNums = { 0, 0 };
wNums[0] = 10; // OK

これは0だった領域を10で上書きするという行為なので、問題ありません。

以上。

そして以上。


いえいえ、なんかこの関係性が面白くてついブログネタにしてしまったのですよ、ふふふふふ。
スポンサーサイト

コメント

非公開コメント
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。