自動的におこなわれる
基本データ型 から
ラッパークラス
への型変換をボクシング、
ラッパークラスから基本データ型への型変換をアンボクシングといいます。
J2SE 5.0 で提供されました。
J2SE 5.0 以降でしかコンパイルや実行をしないプログラムであれば、
基本データ型とラッパークラスを区別せずに使えるようになりました。
ジェネリクス
の導入と同期して提供されているもので、
Integer型 や Double型 のコレクションをあつかうプログラムではよく使われます。
普通に使う範囲での便利さがある反面、従来からの型の互換の規則
基本データ型の
拡大変換 widening primitive conversion は自動的に行われる。
- byte から short、 int、 long、 float、 double への変換
- short から int、 long、 float、 double への変換
- char から int、 long、 float、 double への変換
- int から long、 float、 double への変換
- long から float、 double への変換
- float から double への変換
参照型の拡大変換 widening reference conversion は自動的に行われる。
- 子クラスから親クラスへの変換
- 配列から Object 型への変換
- など
の間に挟みこまれたための複雑さがあります。
簡単な範囲でのみ活用しましょう。
コマンドラインに書かれた単語の出現頻度を表示するプログラム
プログラム BoxingDemo1T.java
実行結果
ジェネリック と ボクシング・アンボクシングのない J2SE 1.4 で記述すると、
プログラム BoxingDemo1.java
実行結果は同じです。
BoxingDemo1T.java からの変更点
赤字 ... ボクシング・アンボクシング
青 ... for/in を 通常の for にしたための変更
とくに10行目は、Integer → int → 加算 → Integer
といった頻繁な変換を記述せずにすみます。
J2SE 5.0 から Integer.valueOf(1)、Double.valueOf(1.0)
など 対応する基本データ型に対する valueOf メソッドが用意されています。
上記例題1のプログラムを参考に、
コマンドラインに書かれた単語の長さについての出現頻度を表示するプログラムを作成しなさい。
考え方
例題1は、コマンドラインに書かれた文字列と出現回数の対応
String → Integer
という対応であるが、これを文字列の長さと出現回数の対応
Integer → Integer
に変更し、args[i] の代わりに、 args[i].length() を指定する。
解答例1 J2SE 5.0
解答例2 J2SE 5.0
6行目をどうしても
Map<String, Integer> map = new TreeMap<String, Integer>();
のままにしておきたければ、長さを String で表現するのも1つの方法です。