long value = 0x88888888 ;
int i = (int) (value & 0xff);
上述表达评估是如何进行的?是吗
int i = (int)value & (int)0xff ;
还是首先评估按位和操作?我感到困惑: - |
答案 0 :(得分:5)
让我们看看bytecode:
public static void main(java.lang.String[]);
Code:
0: ldc2_w #35 // long -2004318072l
3: lstore_1
4: lload_1
5: ldc2_w #37 // long 255l
8: land
9: l2i
10: istore_3
11: return
}
正如您所看到的,十六进制0xff
首先转换为long,然后使用bitwise and
到值,然后使用0xff
对其进行屏蔽然后转换为int
lload_1
从本地变量1
ldc2_w
将常量池(double或long)中的常量#index推入堆栈
land
按位和两个长l2i
将long转换为int 答案 1 :(得分:3)
首先,按位操作被评估为longs上的操作(括号保证它)。然后将结果转换为int。
答案 2 :(得分:0)
首先(value & 0xff);
将被解决。即value(bitwise and)0xff.
然后使用类型转换int i = (int) (value & 0xff);