Autoboxing/unboxingのサンプル(比較演算子)

Autoboxing/unboxingの機構は、(誤解を恐れずに書くと)ラッパークラス(オブジェクト)をプリミティブ型変数の「垣根」をなくす機構。

ここでは、この機構が

にどう影響するのか、確認する。(比較演算においてどのように振舞うか、を確認する。)


以下のようなInteger型の変数があるとする。

    Integer ri1 = new Integer(20);
    Integer ri2 = new Integer(10);

1.4系まででは、これらをifで比較するには、Unboxして、以下のようにする必要があった。

if(ri1.intValue()>ri2.intValue())

実験として以下のコードを書いてみる。

package test;

/**
 * Autobixing/unboxingのサンプル2
 * 
 */
public class ExampleAutoboxing2 {

    public static void main(String[] args) {

        Integer ri1 = new Integer(20);
        Integer ri2 = new Integer(10);

        // 1.4系までの比較方法 (A)
        if(ri1.intValue()>ri2.intValue()){
        System.out.println("result1=true");
        }

        int i=20;
        // Auto-Unboxingを使用した比較方法 (B)
        if(i>ri2){
        System.out.println("result2=true");
        }

        // Auto-Unboxingを使用した比較方法 (C)
        if(ri1>ri2){
        System.out.println("result3=true");
        }        

    }
}

これを実行した結果は、以下のようになる。

result1=true
result2=true
result3=true

これより、

  • (A)のように1.4系と同じ書き方でも問題ない
  • (B)、(C)を見ると比較時にラッパークラスからUnboxingされて、プリミティブクラスとして比較される

ことがわかる。