[英]Java Array loop behaviour
我一直在测试一些不同的方法来将数组项与常数相乘。
我已经产生了不同的结果,这取决于我如何遍历数组并且我无法理解这一点(我对Java很新,并且仍然关注事物的传递或引用)。
测试1
int[] array = {1, 2, 3, 4};
for (int number : array)
{
number *= 2;
}
导致未修改的数组项:
{1, 2, 3, 4}
看起来number
不是实际的数组项,而是一个用它的值初始化的新int
。 那是对的吗?
测试2
我认为通过使用一个Object数组可能会起作用,假设number
是对实际数组项的引用。 这是我使用Integer
而不是int
:
Integer[] array = {1, 2, 3, 4};
for (Integer number : array)
{
number *= 2;
}
同样,导致数组项未经修改:
{1, 2, 3, 4}
测试3
经过一些头部刮擦后,我尝试了一种不同的循环方法,如下所示:
int[] array = {1, 2, 3, 4};
for (int i = 0; i < array.length; i ++)
{
array[i] *= 2;
}
导致数组项成倍增加:
{2, 4, 6, 8}
这个最终结果对我来说很有意义,但我不理解第二次测试的结果(或者第一次测试的结果)。 到目前为止,我一直认为测试1和2中使用的循环只是测试3中使用的循环的简写版本,但它们明显不同。
为什么这不像我预期的那样工作? 为什么这些循环不同?
这是因为增强的for
循环使用数组中值的副本。 代码在
for (int number : array) {
number *= 2;
}
类似于:
for(int i = 0; i < array.length; i++) {
int number = array[i];
number *= 2;
}
使用Integer[]
。
此外,当您在Iterable
例如List
使用增强型for
循环时,它会使用迭代器。 这意味着,像这样的代码:
List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
for(Integer i : intList) {
i *= 2;
}
类似于:
for(Iterator<Integer> it = intList.iterator(); it.hasNext(); ) {
Integer i = it.next();
i *= 2;
}
相关信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.