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)
| 归档时间: |
|
| 查看次数: |
11227 次 |
| 最近记录: |