java - 为什么这个字节不会导致异常?

标签 java primitive

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

byte b = (byte) 0b11110000000;

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

最佳答案

你应该得到 -128

当您显式地将 int 转换为 byte 时,最低的 8 位被采用,其余的被丢弃。

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

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

关于java - 为什么这个字节不会导致异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45713897/

相关文章:

Java:获取用于反射的原始数组类的正确方法

java - 如何将十六进制字符串转换为十六进制字节?

java - 如果我的库也可能有带有我不知道的 Order 注释的 ControllerAdvices,我应该在 ControllerAdvice 上使用什么 order 值?

java - Java 中的 Date.parse() 使用安全吗,即使它已被弃用?如果没有,是否有可行的替代方案?

Java 方法参数类型来自包含方法名称的任何类型

objective-c - Objective-C 原始数之间的区别

java - 使用java中自制的打印方法打印int或double

通过引用传递的 java 函数原语

java - 为什么 Object[] 可以存储原语?

c++ - RPC 调用返回一个递增的值而不是 ULONG_PTR