-128以二进制形式赋给byte变量?

下面两条语句:
byte binValue = 0b10000000;
byte value = -128;

第一条语句报错,需加强制类型转换(byte)
第二条语句通过。

为什么呢?

二进制表示的不是-128。超出了byte的类型。所以强转。Integer.toBinaryString(-128);利用这个可以输出负128的二进制数

你需要明确几点:
1、整数常量的默认类型是int,int的范围比byte大,理论上大转小需要强转。
2、常量的值是确定的,所以在编译期可以直接确定赋的值是否在byte的取值范围[-128, 127]内,
如果在,不会存在溢出问题,所以可以直接赋值,
如果不在,报错,需要强转,强转之后的值可能就不是原来的值了
二进制数0b10000000表示的是十进制数128,已经超过了byte的取值范围,所以需要强转为byte,强转之后变成了-128,