我们可以将循环变量分配给 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 方式),因为您不能总是确定列表实现的行为。
我想在 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 方式),因为您不能总是确定列表实现的行为。