【发布时间】:2020-03-07 19:50:52
【问题描述】:
我有一些使用 Arrays.stream(int arr[]).sum() 添加的整数。它返回 int 中截断的总和,而实际总和更大并且适合 long。为什么流 API 通过截断只返回 int 而不是 long?
尝试过像 int myArray[] = { 1, 5, 8 }; 这样的小整数 int sum = Arrays.stream(myArray).sum();
工作正常。
但不适用于总和为 long 的较长整数。
下面的场景 1 工作正常并返回 14
int myArray[] = { 1, 5, 8 };
int sum = Arrays.stream(myArray).sum();
而方案 2 将无法工作,因为总和超过 32 位。它给出的总和为 -105032716,而预期为 4189934580
int myArray[] = { 2094967290, 2094967290};
int sum = Arrays.stream(myArray).sum();
为了得到正确的总和,如果我在下面做,我会得到预期的结果 4189934580
long sum = 0L + 2094967290+2094967290;
System.out.println(sum);
【问题讨论】:
-
我没有参与它的规范,所以我只能猜测:可能他们不想总是做一个
long加法(包括转换),即使它显然不需要。所以选择留给开发人员,就像简单的添加一样。
标签: java java-stream