[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
2022-05-01 18:13:40
質問
今日まで、たとえばこんな風に思っていました。
i += j;
のショートカットだけでした。
i = i + j;
でも、これを試したら。
int i = 5;
long j = 8;
その後
i = i + j;
はコンパイルされませんが
i += j;
は正常にコンパイルされます。
ということなのでしょうか。
i += j;
は、次のようなショートカットです。
i = (type of i) (i + j)
?
どのように解決するのですか?
この手の問題ではいつもそうだが、答えはJLSが握っている。この場合 §15.26.2 複合代入演算子 . 抜粋したものです。
複合代入式は次のような形式です。
E1 op= E2
は次のように等価です。E1 = (T)((E1) op (E2))
ここでT
のタイプです。E1
ただしE1
は一度だけ評価されます。
以下はその例です。 §15.26.2
[...] 次のコードは正しいです。
short x = 3; x += 4.6;
と等価であるため、結果的にxは値7を持つことになります。
short x = 3; x = (short)(x + 4.6);
つまり、あなたの仮説は正しいのです。
関連
-
[解決済み】JNI共有ライブラリ(JDK)の読み込みに失敗しました。)
-
[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Rの代入演算子"="と"<-"の違いは何ですか?
-
[解決済み] IntelliJのインスペクションで「シンボルを解決できない」と表示されたが、コードはコンパイルされる
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み】Mac OS Xでは、Javaはどこにインストールされていますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] enumのordinalを使用するのは良い習慣ですか?
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] Javaでdoubleをfloatに変換する
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について