JavaA2Z

KAB-studio > プログラミング > JavaA2Z > ボクシング変換とは

ボクシング変換

日本語 箱詰め変換
英語 boxing conversion
ふりがな ぼくしんぐへんかん
フリガナ ボクシングヘンカン

解説

プリミティブ型からそのラッパークラス暗黙的キャストできる機能。
J2SE 5.0で追加された構文。

プリミティブ型変数リテラルを使用して、ラッパークラス参照初期化もしくは代入すると、自動的キャストわれる。これを「ボクシング変換」と言う。またその逆を「アンボクシング変換」と言い、合わせて「オートボクシング」と呼ぶ。

正確には、この時ラッパークラスインスタンスが作られ、その中にプリミティブ型の値(この例では「100」)が格納され、参照変数(この例ではinteger1)がインスタンス参照する。
J2SE 1.4以前ではこのような書き方はできなかった。それは当然で、ラッパークラス参照はあくまで参照であり、参照値以外の値を格納できないからである。
しかしそれでは不便であるということで、このような変換が可能となった。

ボクシング変換をう際には、必ずプリミティブ型に対応するラッパークラスを使用する必要がある。
たとえば「Long long1 = 100;」はコンパイルエラーになる。「100」は整数リテラルであり、整数リテラルintであり、intに対応するラッパークラスIntegerクラスでありLongクラスではないからである。
このように、プリミティブ型であれば暗黙的キャストわれる場合でも、ボクシング変換では対応するラッパークラスにしか変換できないため注意すること。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java

public class Sample
{
    public static void main( String[] args )
    {
        // int型変数を作って中に100を入れておきます。
        int i = 100;
        // これをIntegerクラスへボクシング変換します。
        Integer integer1 = i;
        System.out.println( integer1 );
        // 100

        // これはJ2SE 1.4以前ではコンパイルエラーになります。
        // ※javacのエラーメッセージ
        // 互換性のない型
        // 検出値  : int
        // 期待値  : java.lang.Integer

        // ボクシング変換を使わずに変換する場合には
        // Integerクラスのインスタンスを作り、その時
        // コンストラクタに渡しましょう。
        Integer integer2 = new Integer( 200 );
        System.out.println( integer2 );
        // 200

        // 型が異なるとボクシング変換は機能しません。
        // たとえばint→doubleへは暗黙的キャストが可能です。
        double d = i;
        // でもこれをボクシング変換で行うことはできません。
        // ※コンパイルエラーの例
        // Double double1 = i;
        // ※javacのエラーメッセージ
        // 互換性のない型
        // 正しくは "Identifier" です。
        // 検出値  : int
        // 期待値  : java.lang.Double
        // ※Eclipseのエラーメッセージ
        // integer を解決できません
        // ※コンパイルエラーの例ここまで

        // そのため、意外にも以下はコンパイルエラーになります。
        // ※コンパイルエラーの例
        // Long long1 = 300;
        // ※コンパイルエラーの例ここまで
        // 整数リテラルはint型だからです。
        // この場合、以下のようにLを付けてlong型にすれば大丈夫。
        Long long1 = 300L;
        System.out.println( long1 );
        // 300
    }
}
// Sample.java

public class Sample
{
    public static void main( String[] args )
    {
        // int型変数を作って中に100を入れておきます。
        int i = 100;
        // これをIntegerクラスへボクシング変換します。
        Integer integer1 = i;
        System.out.println( integer1 );
        // 100

        // これはJ2SE 1.4以前ではコンパイルエラーになります。
        // ※javacのエラーメッセージ
        // 互換性のない型
        // 検出値  : int
        // 期待値  : java.lang.Integer

        // ボクシング変換を使わずに変換する場合には
        // Integerクラスのインスタンスを作り、その時
        // コンストラクタに渡しましょう。
        Integer integer2 = new Integer( 200 );
        System.out.println( integer2 );
        // 200

        // 型が異なるとボクシング変換は機能しません。
        // たとえばint→doubleへは暗黙的キャストが可能です。
        double d = i;
        // でもこれをボクシング変換で行うことはできません。
        // ※コンパイルエラーの例
        // Double double1 = i;
        // ※javacのエラーメッセージ
        // 互換性のない型
        // 正しくは "Identifier" です。
        // 検出値  : int
        // 期待値  : java.lang.Double
        // ※Eclipseのエラーメッセージ
        // integer を解決できません
        // ※コンパイルエラーの例ここまで

        // そのため、意外にも以下はコンパイルエラーになります。
        // ※コンパイルエラーの例
        // Long long1 = 300;
        // ※コンパイルエラーの例ここまで
        // 整数リテラルはint型だからです。
        // この場合、以下のようにLを付けてlong型にすれば大丈夫。
        Long long1 = 300L;
        System.out.println( long1 );
        // 300
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2009/06/05
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。