根据Java语言规范:
如果左侧 *** 作数的提升类型为int,则仅将右侧 *** 作数的最低5位用作移位距离。就像右侧 *** 作数受到掩码值0x1f的按位逻辑AND运算符&(§15.22.1)一样。因此,实际使用的移动距离始终在0到31(含)范围内。
因此,如果b是一个int,则表达式等于
long a = b | c;
我非常怀疑这是什么目的。应该是
long a = ((long) b << 32) | c;
(如果b已经很长,则代码是正确的,并且FindBugs将该错误误认为是错误)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)