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);
}