我是初学者。这可能是一个愚蠢的问题。
我有一组非常大的数字。我需要找到数组中所有这些数字的总和。我定义了一个 BigInteger 并将其初始化为零。现在我将遍历数组并将每个元素添加到这个 BigInteger。
BigInteger big = BigInteger.ZERO;
for(BigInteger b : array){
big.add(b);
}
没有编译错误,但是 big
值仍然为零,代码无法运行。所以,我检查了一下,了解到 BigInteger add 方法返回总和。我修改了上面的代码。
big = big.add(b);
现在一切正常。
我的问题:那里到底发生了什么?为什么第一个代码没有更新 big
值。
我可以比较这个 BigInteger.add()
和 collection.add()
感谢更多见解。谢谢。
最佳答案
Why didn't the first code update big value.
BigInteger 是不可变的,您无法更改它,就像您无法更改 String 或任何原始包装器一样。
例如
String s = "Hello ";
s.concat("World"); // doesn't change anything.
s = s.concat("World"); // Updates 's'
Can I compare this BigInteger.add() with collection.add()
集合是可变的,但这个标量值不是。
使用可变对象在很大程度上是一种性能让步。如果您有一个每次都获取完整副本的集合,那么它的性能会非常糟糕。
关于java - 为什么需要使用 "big = big.add(..)"来求和 BigIntegers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31758856/