Java:字节转换问题

时间:2015-08-19 06:53:34

标签: java

我有以下代码:

byte b=10;
System.out.println("Test b:"+b);

此代码已编译并正常运行。但是,我不明白为什么。 10是这里的字面值,它是整数字面值(整数的默认值)。所以我们在这里铸造,因为在左侧我们有字节,在右侧我们有整数。而这正在缩小为byte<integer。据我所知,缩小必须始终是显式铸造,否则代码不会编译。谁能解释为什么这段代码有效?

2 个答案:

答案 0 :(得分:4)

它有效,因为10是编译时常量。编译器可以推断它符合byte范围,因此它允许赋值。

您可以通过为byte变量赋值来进行游戏。例如,如果你做

 byte b = 128; 

然后您会收到编译错误,因为128不适合byte范围。在这种情况下,您可以进行演员表:

 byte b = (byte) 128;

然后您最终会出现溢出,b将被评估为-128

答案 1 :(得分:0)

byte的最大值为127

10适合字节,因此它是一个有效的赋值。

尝试

byte b = 140; //it wont