可能性の重複:
Weird java behavior with casts to primitive typesJavaコンパイラは `(byte)+(char) - (int)+(long) - 1`で何を解釈しますか?
なぜ、このコードは
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
印刷物1、Javaでいますか?なぜそれはコンパイルされますか?
可能性の重複:
Weird java behavior with casts to primitive typesJavaコンパイラは `(byte)+(char) - (int)+(long) - 1`で何を解釈しますか?
なぜ、このコードは
int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
印刷物1、Javaでいますか?なぜそれはコンパイルされますか?
あなたがしていることは、型キャストを単項演算子と組み合わせることです。
それでは見てみましょう:
まず、あなたがタイプlong
にキャスト値-1
を、持っています。
次に、単精度演算+
を実行します。これは値を変更しないため、まだ(long) -1
です。
次に、それをintにキャストして、int -1
になりました。次に、単項演算子-
を使用するので、-(-1)
があり、1
です。
次に、それをcharにキャストします。したがって、char 1
があります。次に、単項演算子+
を使用するので、まだ1
があります。
最後に、値はbyte
にキャストされるので、byte 1
になります。そしてそれは再び(暗黙のうちに)int
にキャストされます。
様々な(<type>)
部品だけで、様々なタイプ間のキャストされています。その後、割り当て中int
にキャストします>(byte)1
- >-1
- - >(long)-1
- >(int)-1
- >-(int)-1 = 1
- >(char)1)
それでは、右1
からの読み取り、されるが起こります。型キャストは値の効果的な変更をもたらさないので、最初の行全体はint i = 1;
に相当します。
これは右から左に移動します。 -1は長くキャストされます。 +プレフィックスが適用され(効果はありません)、intにキャストされます。次に、 - 適用され(1に変更)、charにキャストされます。最後に、+プレフィックスが適用されます(それでも効果はありません)。これはバイトにキャストされます。
括弧を追加することができます:
int i = ((byte) + ((char) - ((int) + ((long) (- 1)))));
System.out.println(i);
は、基本的には、これは単なるキャストと単項演算子のシリーズです(+
は何も、-
ネゲートしません)
完全なプログラムの流れはluiscubalの答え
であります
ソースのソースhttp://vanillajava.blogspot.com/2011/10/java-plus.html –