乘以BigInt

时间:2014-04-01 08:17:20

标签: java bigint

int SIZE = 512;        
p = new BigInteger(SIZE, 15, new Random());
q = new BigInteger(SIZE, 15, new Random());
r = new BigInteger(SIZE, 15, new Random());

n = p.multiply(q);
temp1=n;
n = n.multiply(r);
   if (temp1.multiply(r)!=n) System.out.println("test");

我的代码在不应该打印test时。为什么呢?

2 个答案:

答案 0 :(得分:5)

您必须使用equals来比较对象相等性。

!===比较参考资料。

BigInteger b0 = new BigInteger("0");
BigInteger b1 = new BigInteger("0");
System.out.println(b0 != b1);
System.out.println(!b0.equals(b1));

<强>输出

true
false

答案 1 :(得分:2)

根据这个实施:

public BigInteger multiply(BigInteger val) {
    if (val.signum == 0 || signum == 0)
        return ZERO;

    int[] result = multiplyToLen(mag, mag.length,
                                 val.mag, val.mag.length, null);
    result = trustedStripLeadingZeroInts(result);
    return new BigInteger(result, signum == val.signum ? 1 : -1);
}

temp1.multiply(r)会返回 BigInteger对象,其地址与n不同。 使用!temp1.multiply(r).equals(n)