class Demo1
{
public static void main(String[] args)
{
byte b = 17;
byte x = 21;
byte m =x +b;
System.out.println("x="+m);
}
}
为什么会报错?
而:
class Demo2
{
public static void main(String[] args)
{
int b = 17;
int x = 21;
int m =x +b;
System.out.println("x="+m);
}
}
却没错.
为什么Demo1里面的x和b明明都是byte类型却会报错,Demo2里面的int类型之间进行运算却没错,求大神解答
下面是JVM指令集截图。
如图片提示,加运算(add)只有 int long float double 这4个数字类型支持的。
所以比int少的加运算自动换成int的加运算,结果也是int
还有 自动类型转换是比自己大的类型才可以。转到比自己少的类型只能explicitly。 所以前者就报错了。
byte b=13;
byte x=13;
byte m=(byte)b+(byte)x;
这样就可以了,因为byte在运算时会自动转换成int
byte + byte 会自动转成int,jvm内部的一个操作
第一种,17,21会作为int型处理,所以后面x+b被认为是int行,大范围数据向小范围数据有可能丢失
加运算在java里只能对int double float String类型使用,如果用了就会把答案转成这些类型。char byte short boolean这些都不能用
这个就是java里的硬性要求,具体研究jvm的指令计算。