我自己学习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);