首先你要明确一点byte类型表示一个字节8位,用来表示一些基本字符,int是长度为32位的整形数。当你在Java中给一个byte类型数据初始化时,你可以用字符,也可以用整数,但是这个整数必须要在-128和127之间(因为byte是8位),它会将这个数转化为一个字正亩告符然后存放起来,因此你的前两行耐宴代码是没有问题的。第四行就开始有问题了:a,b都是byte型,他们相加会先自动转换为int然后相加,当然相加的结果也是int型的,但是你要将一个int型的数字赋给一个byte型的c显然是要强制转换的,因此Java会报编译错误,第五行是同样的道理。第六行有点特殊了,请注意,64+1编译器会自动当做65来处理,举明这句和c=65效果是一样的,由于65是在【-128,127】这个区间之间的,因此赋值当然不会出错啦。
64 + 1会直接编译为65 因为65<128 所以可以直接作为byte类型赋值
byte类型数据是不能直接纯宏相加的,相加会自动类型会转换枯举int型,所以你再赋值给byte 型变量要强制类型转换成byte型如下:
c = (byte)(a+b);
注:自动类型转换:小类型转大类型 如 byte占一个字节,int占4个字节
强制类型转换:大没裤碧类型转小类型
楼上基本正确的
我补充一点
在java中整数默认都上int型,意思就是你写一个1那么1就默认为int型
浮点数默认为double型,同上
c=a+b; //byte+byte=int
c=a+1; //byte+int(1为int型上面解释了)=int
c=64+1; //其枯纤实int+int=(?)就不好说了,这要考虑茄历范围,java编颤败搜译器帮你把类型转换为你想要的类型,这里就转换为你想要的byte了
但下面这样就不行了
c=1+127//出错,超出byte范围