java - 为什么 Byte 不能保存在其范围内的值?

标签 java int byte primitive-types

小杯装不下大的值(value)。好吧,你可以,但你会失去一些。正如我们所说,你会得到溢出。如果编译器可以从您的代码中判断出某些内容不适合您正在使用的容器(变量),则它会尝试帮助防止这种情况发生。

例如,

int x= 24;

byte b= x;

// Won't work!!

现在字节范围是-128127。现在,我的问题是为什么这不起作用?毕竟x的值是2424绝对小到可以装进byte(可能是个很菜鸟级别的问题,但我对这个概念真的很困惑)。

最佳答案

知道 byte b= x; 等同于 byte b= 24;,智能编译器也可以告诉您,但是 Java 以非常精确的方式指定,以确保所有编译器都做同样的事情,并且它不允许编译器出于接受或拒绝程序的目的而注意到这种等价性。 (尽管他们之后可以使用它来执行优化。)所有编译器应该知道的是表达式 x 具有静态类型 int,所以它不能保证 byte b= x 正在分配 byte 范围内的值。

相反,您必须编写 byte b = (byte) x,将表达式 x 显式转换(“转换”)为类型 byte.

(这是静态类型的一般原则——对于任何类型系统,总会有一些其他方面正确的程序被类型系统拒绝。在这种情况下,类型系统不允许您从 赋值intbyte,无需转换。)

关于java - 为什么 Byte 不能保存在其范围内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884029/

相关文章:

java - 为什么这个转换会出错呢?

C:将最小 32 位整数 (-2147483648) 转换为 float 给出正数 (2147483648.0)

java - 了解字节缓冲区

tomcat - PowerShell - 创建 Zip 文件留下零字节文件

java - 获取 DialogFragment 进行实例化

java - Java卷积

java - 如何开始编写代码覆盖工具?

java - 为什么 gson 不允许序列化 java.lang.Class?

java - 转换为字节时 JUnit 出错?

java - 它是否正确 ?如何从文件加载字节?