说我有以下一段java代码
ArrayList<Double> myList = new Double[100];
for (Double x : myList)
x = randomDouble();
这实际上是修改myList还是仅修改虚拟变量?
我意识到我应该尝试使用此代码段,但我认为这是我应该能够在此网站上进行谷歌搜索或搜索的内容,到目前为止,几个查询都没有用。
答案 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() );
}