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

Iva*_*van 2 java byte casting literals

好的,从Java 6开始,没有y literal后缀.考虑以下代码:

byte b = some_byte();
switch (b) {
    case (byte) 0x80: ...
    case (byte) 0x81: ...
Run Code Online (Sandbox Code Playgroud)

而这个替代方案:

int b = some_byte() & 0xff;
switch (b) {
    case 0x80: ...
    case 0x81: ...
Run Code Online (Sandbox Code Playgroud)

你会用哪个?在第一种情况下,在运行时或编译时执行(字节)强制转换?谢谢.

Jon*_*eet 6

你会用哪个?

可能是后者,仅仅是为了简单 - 但有一个评论来解释发生了什么.

在第一种情况下,在运行时或编译时执行(字节)强制转换?

编译时间.不要忘记,无论如何,case值必须是编译时常量.

另一种选择是为这些东西创建常量:private static final byte FOO =(byte)0x80; private static final byte BAR =(byte)0x81;

...

switch (someByte()) {
    case FOO:
    case BAR:
        ...
}
Run Code Online (Sandbox Code Playgroud)

除了其他任何东西,这使得价值观不那么"神奇".

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