我们可以将循环变量分配给 Java 中循环内的值吗?

Can we assign a variable for looping to a value inside the loop in Java?

我想在 Java.

中的 for 循环内将某个值分配给迭代变量
List<Integer> values = Arrays.asList(1,2,4,16,32,64,128);
for (Integer value: values) {
   value = value / 2;  // local value
}

这项作业在 java 有效吗?

不可以,也不推荐,但在你的情况下

List<Integer> values = Arrays.asList(1,2,4,16,32,64,128);
    for (Integer value: values) {
       value = value / 2;  // local value even its modify it will not affect in collection so you will not get an error.
    }

Java 具有 值类型 引用类型 。因此,如果您在 foreach 循环及其 value type 中修改任何内容,它将 work 及其本地value 所以它不会修改集合,但是如果它的引用类型你会得到一个错误。

在for-each循环中,我们不能修改集合,它会抛出一个ConcurrentModificationException 修改集合仅意味着删除元素或更改存储在集合中的项目的内容。

如果你想修改一个集合使用iterator

如果你只需要遍历使用foreach

更多请访问here

你可以通过 hack 的方式做到这一点,但它非常可疑,如果你真的需要这个,你可能做错了什么。

您可能需要有另一个集合,您可以在其中放置处理后的值,

List<Integer> values = Arrays.asList(1,2,4,16,32,64,128);
List<Integer> newValues = new LinkedList();

for (Integer value: values) {
  newValues.add(value / 2); 
}

或者如果您询问是否可以简单地重新分配迭代器值,当然可以,但又有点可疑。也许你可以在这种情况下使用它;

List<Integer> values = Arrays.asList(1,2,4,16,32,64,128);

for (Integer value: values) {
  if(value > 32)
    value = 32;
  process(value); 
}

因为我只重新分配迭代器 value 它是安全的,但是在循环期间编辑集合将导致 ConcurrentModificationException 或更糟(hacky 方式),因为您不能总是确定列表实现的行为。