不同的byte [] =>同样的BigInteger?

时间:2012-10-27 02:24:57

标签: java biginteger

有人可以向我解释在使用public BigInteger(byte[] val)时,两个边缘但非平凡的不同字节数组会产生相同的BigInteger吗?

怎么可能......

import java.math.BigInteger;

public class BigIntegerTest
{
    public static void main(String[] args)
    {
        BigInteger a = new BigInteger(new byte[] {-1, -1, -1, -1, 123});
        BigInteger b = new BigInteger(new byte[] {-1, 123});

        System.out.println(a.toString(16)+" .equals "+b.toString(16)+" ? "+(a.equals(b)));
    }
}

...打印真实吗?

我确定我误解了JavaDocs,但我没看到。我会检查来源......但是,呃,我找不到它。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

第一个包含与第二个相同的值以及左侧的大量符号扩展。

答案 1 :(得分:0)

当您使用new BigInteger(byte[]);时,它首先在字节数组中找到非签名字节,然后收集有符号字节以获取数字值。

在两个示例中,非签名字节相同,即123。有符号字节也相同,即-1。唯一的区别是,在第一个示例中,您有一些额外的符号字节被忽略。

收集有符号和无符号字节后,您的两个号码都代表相同的BigInteger value,因此equals会产生true