我有以下代码:
byte b=10;
System.out.println("Test b:"+b);
此代码已编译并正常运行。但是,我不明白为什么。 10是这里的字面值,它是整数字面值(整数的默认值)。所以我们在这里铸造,因为在左侧我们有字节,在右侧我们有整数。而这正在缩小为byte<integer
。据我所知,缩小必须始终是显式铸造,否则代码不会编译。谁能解释为什么这段代码有效?
答案 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