这个问题可能很基础,但是请问各位大佬,为什么这么写的话并没有真正修改arr里 index3和4的值啊?
forEach里面的lambda 函数并没有真正修改原arr吗?
这个问题可能很基础,但是请问各位大佬,为什么这么写的话并没有真正修改arr里 index3和4的值啊?
forEach里面的lambda 函数并没有真正修改原arr吗?
这个问题其实是 java “引用传递”和“值传递”的问题,并不是 forEach 方法或是 lambda 表达式的问题。
题主的这段代码去掉lamda表达式之后类似下面这段:
public void testArray(){
int[] arr = new int[5];
Arrays.setAll(arr, i -> i+1);
System.out.println(arr);
for(int i=0 ; i < arr.length ; i++){
int element = arr[i];
element = 10;
}
System.out.println(arr);
}
可以看到在循环中,是对 element 做了修改。
而 element 只是数组中元素的值,而不是数组中元素的引用。
所以修改 element 并不会改变数组中元素的值。
关于 java 中 “引用传递”和“值传递” 的问题,可以参考这篇博文 https://blog.csdn.net/javazejian/article/details/51192130