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

3 java int byte primitive-types

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

例如,

int x= 24;

byte b= x;

// Won't work!!
Run Code Online (Sandbox Code Playgroud)

现在字节的范围是-128到127.现在,我的问题是为什么这不起作用?毕竟,xis 的值是24,并且24肯定足够小以适应字节(可能是一个非常新手级别的问题,但我真的很困惑这个概念).

rua*_*akh 7

你知道这byte b= x;相当于byte b= 24;,并且智能编译器也可以告诉你,但是以非常精确的方式指定Java以确保所有编译器都做同样的事情,并且它不允许编译器注意到这种等价以便接受或拒绝该计划.(尽管如此,他们可以使用它来进行优化.)所有编译器都应该知道表达式x是静态类型int,因此不能保证byte b= x在范围内分配值byte.

相反,您必须编写byte b = (byte) x,明确地将表达式转换("转换")x到类型byte.

(这是静态类型的一般原则 - 对于任何类型系统,类型系统都会拒绝一些其他正确的程序.在这种情况下,类型系统不允许您int在byte没有强制转换的情况下分配.)