Java(字节)文字转换是否有效?

时间:2012-08-21 13:30:47

标签: java casting byte literals

好的,从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: ...
你会用哪个?在第一种情况下,在运行时或编译时执行(字节)强制转换?感谢。

2 个答案:

答案 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是测试类的名称。