我试图理解为什么下面的代码段没有按预期工作。我怀疑它是因为Integer类的不变性,但它并不完全清楚。你能解释一下吗?
List<Integer> a1 = Arrays.asList(1, 2, 4);
a1.forEach(integer -> integer += 10);
答案 0 :(得分:8)
使用此:
a1.replaceAll(integer -> integer + 10);
Integer
个对象是不可变的。 integer += 10
表示
integer = Integer.valueOf(integer.intValue() + 10);
由于integer
是局部变量,因此当Consumer
返回时,结果将被丢弃。
答案 1 :(得分:0)
您的代码与此非常相似:
for (int i = 0; i<a1.size(); i++){
int integer = a1.get(i);
integer = integer + 10;
}
仅仅因为您更新了局部变量integer
的值(它包含列表中的当前元素),它并不意味着您更新了列表本身的值。
您也可以将其视为
int a = 10;
int b = a;
b = 20;
仅因为我们更改了b
的值,它并不意味着我们也更改了a
的值。
如果您正在寻找根据某些功能更新列表中所有值的方法,请使用添加为pointed by erickson的replaceAll
方法。