3

java += 演算子で予期しないことが発生しました。

どうやら、これはコンパイルされます:

int a = 0;
a += 3/2.0;
System.out.println(a);  // outputs "1"

一方、これはそうではありません

int a = 0;
a = a + (3/2.0);   // eclipse compiler error "Type mismatch: cannot convert from double to int"
System.out.println(a);

これは予想される動作ですか?+= 演算子が「タイプの不一致」を報告しないのは奇妙だと思います。これは、double を追加して double の結果が得られ、int 変数に割り当てられる「追加および代入」演算子であるためです。代わりに、暗黙のうちに結果をキャスト (および切り捨て) します。

4

3 に答える 3

3

これは += が から機能した方法Cです。それはバグではなく「機能」です

Java の +=、-=、*=、/= 複合代入演算子を参照してください。

ところで、これを試すことができます

char ch = '0';
ch *= 1.1; // ch = '4'

私の投稿も参照してくださいhttp://vanillajava.blogspot.com/2012/11/java-and-implicit-casting.html

于 2013-06-11T09:47:59.473 に答える
2

int a = a + (3/2.0); 次の理由でコンパイルされません:

  • int+doubleにつながるdouble
  • aとして参照されますint
  • intからのキャストがdouble欠落している

int a += 3/2.0; 以下からコンパイルされます:

  • int+doubleダブルにつながる
  • aとして参照されますint
  • doubleにキャスト可能でint、幸いなことに、コンパイラは次のような暗黙のキャストを追加します。

    int a = (int)(a+ 3/2.0);. これはop=、基本的な代入演算子よりもコンパイラからより巧妙に解釈される特別な表記法によるものです: =.

于 2013-06-11T09:49:52.137 に答える
0

これはバグではなく、暗黙の変換が発生しました。

たとえば。

Byte b=3;

b+=5;  //compiles

b=b+5; //doesnt compiles

ここで何が起こるかです

a=a+3/2.0;   // 3/2.0 produces double , it add int to double but cant convert it implicitly to int.

a += 3/2.0;  // here implicit conversion after addition of a to 3/2.0 happends from double to int
于 2013-06-11T09:48:59.717 に答える