将int值按位移位的目的是什么?

时间:2012-05-11 14:21:33

标签: java bit-shift

查看java.nio.DirectByteBuffer类的源代码,我发现了这个:

if ((length << 0) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) ....

将长度移位零位的目的是什么?可能这是一些性能优化还是其他什么?

3 个答案:

答案 0 :(得分:16)

我想我已经解决了。

在JavaDocs类中:

// -- This file was mechanically generated: Do not edit! -- //

所以它不是手工编码的。它是脚本生成的,当位移的数量为零时,脚本编写器没有为该情况添加优化。

答案 1 :(得分:3)

执行i << 0是无操作。它的评估与i相同。

答案 2 :(得分:2)

i << 0显然是多余的。 Java程序员没有充分的理由故意编写这段代码。

我会说这段代码是:

  • 由不思考的人写的,
  • 由不了解<<运营商所做的事情的人编写,
  • 一些半机械重构的结果,或
  • 最初由某种代码生成器或翻译器生成。

然而,字节码或JIT编译器很可能会优化它,或者它不会对性能产生重大影响。