好的,从Java 6开始,没有y literal后缀。请考虑以下代码:
byte b = some_byte();
switch (b) {
case (byte) 0x80: ...
case (byte) 0x81: ...
和这个替代方案:
int b = some_byte() & 0xff;
switch (b) {
case 0x80: ...
case 0x81: ...
你会用哪个?在第一种情况下,在运行时或编译时执行(字节)强制转换?感谢。
答案 0 :(得分:6)
你会用哪个?
可能是后者,只是为了简单起见 - 但有一个评论来解释发生了什么。
在第一种情况下,在运行时或编译时执行(字节)转换?
编译时。不要忘记,case值必须是编译时常量。
另一种选择是为这些东西创建常量: private static final byte FOO =(byte)0x80; private static final byte BAR =(byte)0x81;
...
switch (someByte()) {
case FOO:
case BAR:
...
}
除此之外,这使得价值观不那么“神奇”。
或者你甚至可以使用枚举......
答案 1 :(得分:1)
在第二种情况下,
some_byte() & 0xff;
添加了2条说明。其余的是相同的。您可以使用
进行检查javap -c Test
其中Test是测试类的名称。