appendix> util> boxing TOPUPPREVNEXT

ボクシング・アンボクシング

【主な機能】

自動的におこなわれる 基本データ型 から ラッパークラス への型変換をボクシング、 ラッパークラスから基本データ型への型変換をアンボクシングといいます。

J2SE 5.0 で提供されました。 J2SE 5.0 以降でしかコンパイルや実行をしないプログラムであれば、 基本データ型とラッパークラスを区別せずに使えるようになりました。

ジェネリクス の導入と同期して提供されているもので、 Integer型 や Double型 のコレクションをあつかうプログラムではよく使われます。

普通に使う範囲での便利さがある反面、従来からの型の互換の規則

基本データ型の拡大変換 widening primitive conversion は自動的に行われる。

参照型の拡大変換 widening reference conversion は自動的に行われる。

の間に挟みこまれたための複雑さがあります。 簡単な範囲でのみ活用しましょう。

【例1】

コマンドラインに書かれた単語の出現頻度を表示するプログラム
New Features and Enhancements J2SE 5.0Autoboxing の最初に掲げられている例を参考にしました。

プログラム BoxingDemo1T.java

実行結果

BoxingDemo1T-1.gif

ジェネリック と ボクシング・アンボクシングのない J2SE 1.4 で記述すると、
プログラム BoxingDemo1.java

実行結果は同じです。

BoxingDemo1-1.gif

BoxingDemo1T.java からの変更点

赤字 ... ボクシング・アンボクシング
青 ... for/in を 通常の for にしたための変更
とくに10行目は、Integer → int → 加算 → Integer といった頻繁な変換を記述せずにすみます。

J2SE 5.0 から Integer.valueOf(1)Double.valueOf(1.0) など 対応する基本データ型に対する valueOf メソッドが用意されています。

【例題1−演習】

上記例題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つの方法です。

作成日:2005-07-28
更新日:2008-10-14