为什么需要使用"big = big.add(..)"来对BigIntegers求和?

Cha*_*ran 5 java arrays add biginteger

我是初学者.这可能是一个愚蠢的问题.

我有一大堆非常大的数字.我需要找到数组中所有这些数字的总和.我定义了一个BigInteger并将其初始化为零.现在我将遍历数组并将每个元素添加到此BigInteger.

BigInteger big = BigInteger.ZERO;
for(BigInteger b : array){
   big.add(b);
}
Run Code Online (Sandbox Code Playgroud)

没有编译错误但big值仍然为零,代码不起作用.所以,我检查了一下并学习了BigInteger add方法返回的总和.我修改了上面的代码.

big = big.add(b);
Run Code Online (Sandbox Code Playgroud)

现在这很好用.

我的问题:那里到底发生了什么?为什么没有第一个代码更新big值.

我可以比较这BigInteger.add()collection.add()

感谢更多的见解.谢谢.

Pet*_*rey 8

为什么没有第一个代码更新大值.

BigInteger是不可变的,你不能更改它,只能更改一个String或任何原始包装器.

例如

String s = "Hello ";
s.concat("World"); // doesn't change anything.

s = s.concat("World"); // Updates 's'
Run Code Online (Sandbox Code Playgroud)

我可以将此BigInteger.add()与collection.add()进行比较吗?

集合是可变的,但这个标量值不是.

使用可变对象在很大程度上是一种性能让步.如果你有一个集合,每次它执行非常糟糕时需要一个完整的副本.