为什么Byte不能保持在其范围内的值?

时间:2014-04-05 17:08:59

标签: java int byte primitive-types

你不能在小杯中加大价值。嗯,好的,你可以,但你会失去一些。正如我们所说,你会得到溢出。编译器试图帮助防止这种情况,如果它可以从你的代码中告诉你某些东西不适合你正在使用的容器(变量)。

例如,

int x= 24;

byte b= x;

// Won't work!!

现在,字节范围为-128127。现在,我的问题是为什么这不起作用?毕竟,x的值是24,而24肯定足够小以适应字节(可能是一个非常新手级别的问题,但我对此概念感到困惑)

2 个答案:

答案 0 :(得分:7)

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

相反,您必须撰写byte b = (byte) x,明确转换("转换")表达式xbyte类型。

(这是静态类型的一般原则 - 对于任何类型系统,类型系统都会拒绝一些其他正确的程序。在这种情况下,类型系统不允许您从{分配{1}} int没有演员。)

答案 1 :(得分:2)

您需要以这种方式将int类型化为字节:

byte b = (byte) x;

否则编译器会在编译时给出错误 请记住,如果值超出了您存储的原始数据类型的边界,则类型转换会导致数据丢失。