记录BigInteger犯过的一个错误

2019年4月18号,面试遇到的面试题,当时做错了,纪念下。

public class StrTest {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("1");
        BigInteger b = new BigInteger("2");
        BigInteger c = new BigInteger("3");
        BigInteger d = new BigInteger("0");

        d.add(a);
        d.add(b);
        d.add(c);
//        BigInteger result = d.add(a).add(b).add(c);
        System.out.println(d.toString());
    }
}

打印结果为:0

经过查看add()源码,看到如下代码:

public BigInteger add(BigInteger val) {
        if (val.signum == 0)
            return this;
        if (signum == 0)
            return val;
     //注意:这里返回了新对象
if (val.signum == signum) return new BigInteger(add(mag, val.mag), signum); int cmp = compareMagnitude(val); if (cmp == 0) return ZERO; int[] resultMag = (cmp > 0 ? subtract(mag, val.mag) : subtract(val.mag, mag)); resultMag = trustedStripLeadingZeroInts(resultMag); return new BigInteger(resultMag, cmp == signum ? 1 : -1); }

猜你喜欢

转载自www.cnblogs.com/xingrui/p/10733049.html
今日推荐