2013-05-03 20 views
5

i+=2i=i+2の短手であることを知りました。しかし今、それを疑っている。次のコードについて 、上記知見には良好に保持していない:ショートハンド代入演算子、+ =、True意味?

byte b=0; b=b+2; //Error:Required byte, Found int

2int型であり、式はint値を返すように上記のコードは、正当です。

しかし、次のコードは正常に動作:

byte b=0; b+=2; //b stores 2 after += operation

これは+=短い手のオペレータは、私が知っているよりやや以上であることを疑うに私を余儀なくされます。 私に教えてください。

+0

参照:http://stackoverflow.com/questions/7038012/typecasting-with-shorthand-operators –

+2

いいえ良い答えが存在するときに答えること。 [this one](http://stackoverflow.com/questions/8710619/java-operator)をチェックしてください。この質問はここでカバーされています。 – Gamb

答えて

10

疑問がある場合は、いつでもJava言語仕様を確認できます。この場合、関連セクションは15.26.2、複合割当演算子です。

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

キャストが追加されている点を除いて、ほぼ正しいと思います。あなたの場合: b+=2;b=(byte)(b+2);

+0

明確かつ簡潔な+1 –

+0

これによれば、2はまだintと見なされませんか?プレースホルダを埋めて、私はそれをb =(byte)b + 2と読みます。 –

+0

したがって、 'i + = 2'は' i =(iの型)(i + 2) 'になります。感謝:) –

0

になります。私はそのコンセプトが似ていると主張することができます。演算子+=は、左にあるオブジェクトのメソッドとして定義され、そのオブジェクトをその引数の右側に渡します。これにより、言語の作者が型キャスティングや互換性の修正などをスローするのは簡単です。唯一のことは、わかっている限り、Javaはユーザーに演算子関数のオーバーロードを許可しないことです。