2

好的,从 Java 6 开始,没有 y 文字后缀。考虑这段代码:

byte b = some_byte();
switch (b) {
    case (byte) 0x80: ...
    case (byte) 0x81: ...

和这个选择:

int b = some_byte() & 0xff;
switch (b) {
    case 0x80: ...
    case 0x81: ...

你会用哪个?在第一种情况下,(字节)转换是在运行时还是编译时执行的?谢谢。

4

2 回答 2

6

你会用哪个?

可能是后者,只是为了简单起见 - 但有评论来解释发生了什么。

在第一种情况下,(字节)转换是在运行时还是编译时执行的?

编译时。不要忘记 case 值无论如何都必须是编译时常量。

另一种选择是为这些东西创建常量: private static final byte FOO = (byte) 0x80; 私有静态最终字节BAR =(字节)0x81;

...

switch (someByte()) {
    case FOO:
    case BAR:
        ...
}

除此之外,这使得价值观不那么“神奇”。

或者你甚至可以使用枚举......

于 2012-08-21T13:32:58.747 回答
1

在第二种情况下,

some_byte() & 0xff;

添加2条指令。其余的都是一样的。你可以检查它

javap -c Test

其中 Test 是测试类的名称。

于 2012-08-21T14:05:05.610 回答