1

为了从 int 转换为 IP String,我使用从 127.0.0.1 到 2130706433 的方法,然后再返回

private static final byte BYTE_MASK = (byte)0xff;

protected byte[] unpack(int bytes) {
    return new byte[] {
        (byte)((bytes >>> 24) & BYTE_MASK),
        (byte)((bytes >>> 16) & BYTE_MASK),
        (byte)((bytes >>>  8) & BYTE_MASK),
        (byte)((bytes       ) & BYTE_MASK)
   };
}

FindBugsEclipse产生错误:INT_VACUOUS_BIT_OPERATION.

INT_VACUOUS_BIT_OPERATION:不做任何有意义工作的位操作。

为什么会这样以及如何解决?

4

1 回答 1

4

我怀疑这是因为你不需要& BYTE_MASKif 你投射到byte. 我假设那BYTE_MASK是 0xff ......在这种情况下,它基本上是没有意义的。只是铸造将具有相同的效果。

JLS 的第 5.1.3 节

有符号整数到整数类型 T 的窄化转换只会丢弃除 n 个最低位之外的所有位,其中 n 是用于表示类型 T 的位数。此外,可能会丢失有关数值大小的信息,这可能会导致结果值的符号与输入值的符号不同。

于 2013-03-12T11:38:44.837 回答