2013-02-22 9 views
5
class Test{ 
    public static void main(String[] args){ 
     int a = 1; 
     int b = 5; 

     Integer c = new Integer(1); 
     Integer d = 5; //autoboxing at work 

     System.out.println(c.compareTo(d)); 
     System.out.println(a.compareTo(b)); 
    } 
} 

なぜですかa.compareTo(b)コンパイル(int cannot be dereferenced)?私はcompareToにオブジェクトが必要であることを知っていますが、必要に応じてオートボックが自動的にintIntegerにすると考えました。この場合、オートボクシングが発生しないのはなぜですか?それ以外の場合はどうなるのでしょうか?Javaは、compareToメソッドのためのintのautoboxingはありませんか?

答えて

4

Oracle tutorial on Autoboxingからプリミティブである場合には、ボクシングが発生する2つのケースは、次のとおり対応するラッパークラスのオブジェクトを期待するメソッドにパラメータとして渡さ

  • 対応するラッパークラスの変数に割り当てられます。

あなたの例で評価されている式(a.compareTo(d))は、これらのシナリオのいずれにも該当しません。

JCP proposal for autoboxingの興味深い追加情報で、割り当て変換、メソッド呼び出し変換、およびキャスト変換のメカニズムとルールについて説明しています。

関連する問題