y在第一个代码段中正进行符号扩展,这会
x在
-1任何时候被覆盖
y < 0。
在第二个代码段中,对的强制转换
int在转换之前完成,因此
x实际上获得的值
y。
long l = (((long)x) << 32) | (y & 0xffffffffL);int x = (int)(l >> 32);int y = (int)l;

y在第一个代码段中正进行符号扩展,这会
x在
-1任何时候被覆盖
y < 0。
在第二个代码段中,对的强制转换
int在转换之前完成,因此
x实际上获得的值
y。
long l = (((long)x) << 32) | (y & 0xffffffffL);int x = (int)(l >> 32);int y = (int)l;