小杯装不下大的值(value)。好吧,你可以,但你会失去一些。正如我们所说,你会得到溢出。如果编译器可以从您的代码中判断出某些内容不适合您正在使用的容器(变量),则它会尝试帮助防止这种情况发生。
例如,
int x= 24;
byte b= x;
// Won't work!!
现在字节范围是-128
到127
。现在,我的问题是为什么这不起作用?毕竟x
的值是24
,24
绝对小到可以装进byte(可能是个很菜鸟级别的问题,但我对这个概念真的很困惑)。
最佳答案
您知道 byte b= x;
等同于 byte b= 24;
,智能编译器也可以告诉您,但是 Java 以非常精确的方式指定,以确保所有编译器都做同样的事情,并且它不允许编译器出于接受或拒绝程序的目的而注意到这种等价性。 (尽管他们之后可以使用它来执行优化。)所有编译器应该知道的是表达式 x
具有静态类型 int
,所以它不能保证 byte b= x
正在分配 byte
范围内的值。
相反,您必须编写 byte b = (byte) x
,将表达式 x
显式转换(“转换”)为类型 byte
.
(这是静态类型的一般原则——对于任何类型系统,总会有一些其他方面正确的程序被类型系统拒绝。在这种情况下,类型系统不允许您从 赋值int
到 byte
,无需转换。)
关于java - 为什么 Byte 不能保存在其范围内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884029/