我有以下代码:
byte b=10;
System.out.println("Test b:"+b);
该代码已编译并且可以正常运行。但是,我不明白为什么。 10 在这里是文字,它是整数文字(默认为整数)。所以我们在这里进行强制转换,左侧有字节,右侧有整数。这个范围正在缩小为 byte<integer
。据我了解,缩小必须始终是显式转换,否则代码将无法编译。谁能解释一下这段代码为什么有效?
最佳答案
它有效,因为 10
是一个编译时常量。编译器可以推断它符合字节
范围,因此它允许赋值。
您可以尝试一下为 byte
变量赋值。例如,如果您这样做
byte b = 128;
那么您将收到编译错误,因为 128
不适合 byte
范围。在这种情况下,您可以进行强制转换:
byte b = (byte) 128;
但最终会出现溢出,并且 b
将被计算为 -128
。
关于Java:字节转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32088420/