0

有人可以向我解释一下,使用时两个不同的字节数组是如何产生相同的 BigInteger 的public BigInteger(byte[] val)吗?

怎么能 ...

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,但我不明白在哪里。我会检查来源......但是,呃,我找不到它。

我错过了什么?

4

2 回答 2

2

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

于 2012-10-27T02:30:39.297 回答
0

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

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

收集有符号和无符号字节后,您的两个数字都表示相同BigInteger value,因此equals导致true.

于 2012-10-27T02:41:47.177 回答