62971


javaで変数計算をしていると下のようなエラーが出ました

**_エラーメッセージ_**

[code]

    精度が失われる可能性があるintからshortへの変換
    short c =a+b
    
[/code]

**_ファイルの内容_**

[code]

    byte a = 64;
    short b = 100;
    short c =a+b 
    
[/code]

どこで変数がintになったのですか？


CC BY-SA 4.0
2020-02-11T17:54:55.653
62964
2020-02-12T03:32:22.337
2020-02-12T03:32:22.337
19110
37786
question
java
javaで変数の計算をすると「精度が失われる可能性があるintからshortへの変換」が出る


[java](/questions/tagged/java "'java' のタグが付いた質問を表示") の仕様として `+` 等、二項演算子の処理の際には
`short` `byte` では演算されず `int` に暗黙の型変換がなされる (これは [c](/questions/tagged/c "'c'
のタグが付いた質問を表示") の仕様を引き継いでるんでしょう) ので  
<https://docs.oracle.com/javase/specs/jls/se10/html/jls-5.html#jls-5.6.2>  
`byte + short` の結果は `int` になります。

似たような例が挙げられていますね  
<https://www.javadrive.jp/start/cast/index5.html>


CC BY-SA 4.0
2020-02-11T23:54:49.090
62971
2020-02-11T23:54:49.090
8589
62964
answer


intになったのは`a+b`の計算結果です。

以下も同じエラーが出るはずです。

[code]

    b = b + b;
    b = b + 1;
    b = b + 0;
    
[/code]

乱暴にいうと、char、byte、shortなどintよりサイズの小さい整数の計算の結果はintになるようです。詳しくは774RRさんの回答を参考にしてください。


CC BY-SA 4.0
2020-02-11T23:54:55.713
62972
2020-02-12T00:15:58.057
2020-02-12T00:15:58.057
35558
35558
62964
answer