1

こんにちは、文字を 2 ずつシフトする Java コードがあります。

char ch = 'A';
ch += 2;
System.out.println(ch);

この場合の出力は「C」です (予想どおり)。しかし、次のようにコードを書き直すと:

char ch = 'A';
ch = ch + 2;
System.out.println(ch);

「型の不一致: int から char に変換できません」というコンパイル エラーが発生します。2 つの割り当てが等しくないのはなぜですか?

4

1 に答える 1

4

X += Yと同じであるというのはよくある誤解ですX = X + YJLS §15.26.2から:

の形式の複合代入式E1 op= E2は と同等ですE1 = (T) ((E1) op (E2))。ここで、Tは の型ですがE1E1は 1 回だけ評価されます。

暗黙のキャストが含まれていることに注意してください。今、あなたが次のようなものを持っているとき:

ch = ch + 2;  // no cast, error

右側の型は であるのintに対し、左側の型はcharであるため、代入の両側で型が一致しないため、エラーが発生します。これは、明示的なキャストで修正できます。

ch = (char) (ch + 2);  // cast, no error
于 2014-03-22T13:59:26.713 に答える