java - 为什么这个字节没有异常?

Tho*_*sMX 3 java primitive

我初始化了一个字节如下:

byte b = (byte) 0b11110000000;
Run Code Online (Sandbox Code Playgroud)

由于一个字节是8位大小,我期望它会抛出一些异常或错误,因为这个数字应该只能分配给short或者以上.它还评估为-124?或者这可能是"正常"行为?(没有异常抛出,但变量溢出)?

Era*_*ran 6

你应该得到-128.

当您显式地转换为intto时byte,将获取最低的8位,其余的将被丢弃.

在您的示例中,最低的8位是10000000,并且该数字的十进制值是-128.

如果没有显式强制转换,代码将不会通过编译,因为您的分配会导致信息丢失.