我自己学习Java。因此,下面的代码除了学习/测试外没有其他功能。

本质上,我正在尝试在foreach循环中修改Integer数组的元素(即,将它们减半)。

我应该注意,我不是在重新排序,添加或删除元素。只是改变他们的值(value)观。

这是我的代码:

Logger.describe("Now copying half of that array in to a new array, and halving each element");
Integer[] copyArray = new Integer[DEFAULT_SAMPLE_SIZE / 2];
System.arraycopy(intArray, 0, copyArray, 0, DEFAULT_SAMPLE_SIZE / 2);
for (Integer x : copyArray) x /= 2;
Logger.output(Arrays.deepToString(copyArray));

但是,原始数组(intArray)是这样的:
[47, 31, 71, 76, 78, 94, 66, 47, 73, 21]

而copyArray的输出为:
[47, 31, 71, 76, 78]

因此,尽管数组的大小减半,但是元素(整数)的值也没有减半。那我在做什么错?

谢谢

最佳答案

您不能在foreach循环中执行此操作。

for (int i=0; i<copyArray.length;i++)
    copyArray[i] /= 2;

否则,您没有将其分配回阵列中。 Integer对象是不可变的,因此无法对其进行修改(尽管可以创建新对象)。

从评论更新:
请注意,虽然发生了一些事情,例如自动装箱/拆箱,大致如下:
copyArray[i] = Integer.valueOf(copyArray[i].intValue()/2);

10-05 18:09