无闻无问 发表于 2022-6-22 09:15

请教a=a + (byte)3为什么会错?

本帖最后由 无闻无问 于 2022-6-22 09:42 编辑

import java.util.*;public class HelloWorld {
    public static void main(String[] args) {
      byte a=12;      
      //a=a + (byte)3; //报错
      a=(byte)(a+3); //没错
      a=(byte)3;    //没错
       System.out.println(a);
    }
}
为什么a=a + (byte)3中(byte)3会报错,而a=(byte)3又不错…跟栈临时变量有关?谢谢谢谢…

huanwuying 发表于 2022-6-22 09:21

byte做运算时(+ - * / %) ,得到的结果是int类型

xieemengxin 发表于 2022-6-22 09:23

java的隐式转换   + - * %都会隐式转换为int进行运算a=(byte)(a+(byte)3);

怜渠客 发表于 2022-6-22 09:28

对的,楼上两位说的对,要在运算后强转一次

往事随风不苦涩 发表于 2022-6-22 09:33

a + (byte)3的时候,a和(byte)3都经历了一次隐式转换,转成了int,进行int相加,得到的结果是(int)15。然后a = (int)15,相当于把int类型的结果赋值给byte类型的a,这里报错。

冰糖心 发表于 2022-6-22 09:33

a + (byte)3会隐式转为int类型。byte, short, char 这些整数类型只要+ - * / % ,等式右边就会变为 int 类型.

无闻无问 发表于 2022-6-22 09:33

huanwuying 发表于 2022-6-22 09:21
byte做运算时(+ - * / %) ,得到的结果是int类型

明白了,谢谢

无闻无问 发表于 2022-6-22 09:38

往事随风不苦涩 发表于 2022-6-22 09:33
a + (byte)3的时候,a和(byte)3都经历了一次隐式转换,转成了int,进行int相加,得到的结果是(int)15。然后 ...

感谢!没分了

泽樟 发表于 2022-6-22 14:29

应该是隐式转换为int计算了,初学我建议你打断点debug一下它的计算过程,会让你豁然开朗
页: [1]
查看完整版本: 请教a=a + (byte)3为什么会错?