java中的for foreach构造是创建硬拷贝还是软拷贝?

时间:2010-06-08 23:17:00

标签: java variables foreach

说我有以下一段java代码

ArrayList<Double> myList = new Double[100];
for (Double x : myList)
    x = randomDouble();

这实际上是修改myList还是仅修改虚拟变量?

我意识到我应该尝试使用此代码段,但我认为这是我应该能够在此网站上进行谷歌搜索或搜索的内容,到目前为止,几个查询都没有用。

3 个答案:

答案 0 :(得分:9)

它不会修改myList。它的工作原理是调用myList.iterator(),然后(重复)hasNext()next(),这些都不会改变myList

此外,Java没有C ++风格的引用。这意味着您不必担心(即使不查看API)x是可以修改myList的引用。

最后,这是无效的语法。它应该是:

ArrayList<Double> myList = new ArrayList<Double>(); 
/* or new ArrayList<Double>(100), but that's only an optimization 
(initial capacity), not the size. */

答案 1 :(得分:2)

  

这实际上是修改myList还是仅修改虚拟变量?

只是虚拟变量。

BTW你甚至没有编译代码。

应该是:

ArrayList<Double> myList = new ArrayList<Double>(100);

Double[] myList = new Double[100];

答案 2 :(得分:2)

所以事后看来,我正在寻找的答案看起来像这样:

使用“=”运算符将对象x设置为新值,而不修改变量myList中的任何值。要使用foreach循环结构修改myList,需要访问该对象的修饰符方法。例如:

for (MyDouble x : myList) {
    x.setX( randomDouble() );
}