请教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又不错…跟栈临时变量有关?谢谢谢谢…
byte做运算时(+ - * / %) ,得到的结果是int类型 java的隐式转换 + - * %都会隐式转换为int进行运算a=(byte)(a+(byte)3); 对的,楼上两位说的对,要在运算后强转一次 a + (byte)3的时候,a和(byte)3都经历了一次隐式转换,转成了int,进行int相加,得到的结果是(int)15。然后a = (int)15,相当于把int类型的结果赋值给byte类型的a,这里报错。 a + (byte)3会隐式转为int类型。byte, short, char 这些整数类型只要+ - * / % ,等式右边就会变为 int 类型. huanwuying 发表于 2022-6-22 09:21
byte做运算时(+ - * / %) ,得到的结果是int类型
明白了,谢谢 往事随风不苦涩 发表于 2022-6-22 09:33
a + (byte)3的时候,a和(byte)3都经历了一次隐式转换,转成了int,进行int相加,得到的结果是(int)15。然后 ...
感谢!没分了 应该是隐式转换为int计算了,初学我建议你打断点debug一下它的计算过程,会让你豁然开朗
页:
[1]