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されて、プリミティブクラスとして比較される
ことがわかる。