[解決済み] Java:エラーメッセージ "Type mismatch: cannot convert int to byte" が表示されるのはなぜですか?
2022-02-11 18:08:47
質問
byte型やshort型の変数を宣言し、それに対して算術演算を行おうとすると、"Type mismatch: cannot convert int to short"(または対応する "Type mismatch: cannot convert int to byte" )のエラーが表示されます。
byte a = 23;
byte b = 34;
byte c = a + b;
この例では、コンパイルエラーは3行目にあります。
解決方法は?
算術演算子は任意の数値型を演算するように定義されていますが、Java言語仕様(5.6.2 Binary Numeric Promotion)によると、byteとshort型のオペランドは、演算子に渡される前に自動的にint型に昇格されるようになっています。
byte型やshort型の変数に対して算術演算を行うには、式を括弧で囲み(その中はint型として演算される)、その結果を目的の型にキャストして戻す必要があります。
byte a = 23; byte b = 34; byte c = (byte) (a + b)。
ここで、本当のJavaの達人たちに続きの質問をします:なぜ?byte型とshort型は全く問題ない数値型です。なぜJavaはこれらの型に対して直接的な算術演算を許さないのでしょうか?(答えは、精度の損失ではありません。そもそもint型に変換する明白な理由がないからです)。
Update: jrudolphは、この動作はJVMで利用可能な演算、特にフルワードとダブルワードの演算子のみが実装されていることに基づいていることを示唆しました。したがって、byteとshortを演算するには、intに変換する必要があります。
関連
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] JavaでInputStreamをバイト配列に変換する
-
[解決済み] Javaでバイト配列から16進文字列に変換する方法は?
-
[解決済み] INTからVARCHARへの変換 SQL
-
[解決済み] java 8で型変換を行うreduceメソッドにcombinerが必要な理由
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Javaパッケージが存在しないエラー
-
[解決済み】"実引数リストと形式引数リストの長さが異なる"
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】intがnullであるかどうかを確認する方法