2009-02-26 16 views
3

質問が明確に語られているかわかりませんが、例が明確になります。 op-assign演算子がJavaでは安全でないのはなぜですか?

は、私はJavaで動作しないことが分かった:

int a = ...; 
a = 5.0; 

が、これは以下となります。

int a = ...; 
a += 5.0; 

はすなわち、=演算子はタイプセーフであると思われるが、+ =ではありません。 これに深刻な理由はないのでしょうか、デザイナーが踏まなければならない恣意的な意思決定の言語なのでしょうか。次のように

a += 5.0;が評価されています:

a = (int) ((double) a + 5.0); 

割り当ては、しかし、明示的なキャストが必要です

答えて

1

の人生を容易にするために。

もう少し考えてみましょう。考えてみましょう:

byte b; 
... 
++b; 

インクリメントが本当にやっている:

b = (byte)(1 + (int)b); 

をしても、それが任意のより良いを得ることはありません+=を使用して:

b += b; 

は次のとおりです。

b = (byte)((int)b+(int)b); 

ことこれらの演算子をuselにするバイト/ショート/ charのess。

もちろん、私たちが任意のサイズの整数を持つまで私は幸せにならないでしょう。

5

理由は、数学の操作は、いくつかの暗黙のキャストを行うということです。

(それは私がJavaは、小数点リテラルとして扱われている覚えていない、フロートではなく、ダブルかもしれません。)

+0

なぜ最終的なキャストをintに戻しているのですか? –

+0

(double、floatのf接頭辞.JavaFX 1.0はdoubleを使用し、1.1はfloatを使用すると信じています) –

+0

@litb:aはintなので、 – mipadi

関連する問題