2012-11-28 8 views
5

は、このコードを考えてみましょう:この割り当てが明示的キャストを必要としないのはなぜですか?

byte b=1; 
long l=1000; 
b += l; 

私はb = b+l(b+l)部分は整数を与えるよう b+=lが評価され、ので、最後の文は、明示的なキャストが必要なことを期待します。 明示的キャストなしで整数をバイトに割り当てることはできませんか?

+0

[Java + = operator](http://stackoverflow.com/questions/8710619/java-operator) – assylias

答えて

17

まあで開始する、b+lint ...

は、longを与えていない...しかし、化合物代入演算子は、他の振る舞いを持っています。 JLS section 15.26.2の通り:

形態E1 OPの化合物の代入式が= E2は、そのE1以外は、TはE1の一種であるE1 =(T)((E1)OP(E2))と等価です一度だけ評価されます。

Tへのキャストに注意してください。

+2

の重複があります。手動でb = b + lと書いたときの違いを見ることができます。あなたが望むエラーが表示されます:-) –

+0

申し訳ありませんが、b + lは長いです。そして、私はもっとOracleドキュメントを読む必要があります。ありがとう。 – PrashanD

関連する問題