2011-12-25 13 views
4

Javaで次の式を見てみましょう。上記の式でJavaで型キャストを実行中にコンパイルエラーが発生する

int temp = -254; 
Integer temp2 = (Integer) temp;  // compiles because of autoboxing 

Integer temp3 = (Integer) -254;  // doesn't compile - illegal start of type. 
Integer temp4 = (Integer) 10-254;  // compiles 

Integer temp5 = (Integer) (int) -254; // compiles 
Integer temp6 = -254;     // compiles 
Integer temp7 = (int) -254;   // compiles 

表現(Integer) -254が一定-254が完全Integerに評価することができていてもコンパイルできないのに対し、なぜこれらの表現(Integer) 10-254(int) -254が有効ですか?

答えて

4

これは興味深いケースです。コンパイラは、Integerクラスとintリテラル(254)に対して整数減算を実行しようとします。

注以下コンパイルされることをより明示的である:

Integer temp3 = (Integer)(-254) 
3

より具体的には、これはsection 15.16 of the JLS 3rd editionに従っている:

cast式は、実行時に、値を変換しますある数値タイプ を別の数値タイプの同様の値に置き換えます。 時刻をコンパイルする際に、式の型がブール値であることを確認します。実行時に、参照値が、指定された参照タイプと互換性のある のクラスを持つオブジェクトを参照することを、実行時に 時間確認します。

CastExpression:
(なPrimitiveType Dimsopt)UnaryExpression
(するReferenceType)UnaryExpressionNotPlusMinus

関連する問題