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

标签 java arrays add biginteger

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

我有一组非常大的数字。我需要找到数组中所有这些数字的总和。我定义了一个 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/

相关文章:

java - 如何为推理器添加单个、六个数据类型属性和规则?

java - Spring - 如何运行一系列线程并等待它们完成后再完成?

javascript - 循环遍历每个数组的每一项,但只针对第一个数组的长度

Python:从字符串末尾修剪下划线

java - 是否值得将类的实例放入接口(interface)中?

java - 当 WebContainer 线程池 (WebSphere) 被完全使用并收到新请求时会发生什么?

javascript - 如何循环遍历数组,每次触发数组中每一项的单击事件

git - 在忽略某些子文件夹的同时将文件夹添加到 git 存储库

javascript - 使用 JavaScript 将 Canvas 添加到页面

android - 将 View 添加到底部的垂直 LinearLayout(以编程方式)