1. ホーム
  2. java

[解決済み] 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に変換する必要があります。