Java修改元素在foreach中

Xen*_*ate 5 java arrays foreach autoboxing

我正在自学Java; 因此,除了学习/测试之外,下面的代码没有任何功能.

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

我应该注意,我没有重新排序,添加或删除元素; 只是改变他们的价值观

这是我的代码:

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));
Run Code Online (Sandbox Code Playgroud)

但是,原始数组(intArray)是这样的:

[47, 31, 71, 76, 78, 94, 66, 47, 73, 21]
Run Code Online (Sandbox Code Playgroud)

而copyArray的输出是:

[47, 31, 71, 76, 78]
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Mat*_*der 13

你不能在foreach循环中这样做.

for (int i=0; i<copyArray.length;i++)
    copyArray[i] /= 2;
Run Code Online (Sandbox Code Playgroud)

否则,您不会将其分配回阵列.Integer对象是不可变的,所以不能修改它们(尽管创建新的).

从评论更新:请注意,虽然有一些事情发生,例如自动装箱/拆箱,大致:

copyArray[i] = Integer.valueOf(copyArray[i].intValue()/2);
Run Code Online (Sandbox Code Playgroud)