文章目录
- 0 写在前面
- 1 可以直接在 Lambda 表达式中访问外层的局部变量
- 2 在 Lambda 表达式当中被引用的变量的值不可以被更改
- 3 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量
- 4 写在最后
0 写在前面
学习使用在Lambda表达式,有些地方访问一些变量访问不到,有些地方可以访问却不能改变,有些地方既可以访问还可以修改实用,所以记录一下。
** Lambda 表达式可以读写实例变量,只能读取局部变量。**
1 可以直接在 Lambda 表达式中访问外层的局部变量
一般来说是访问不到的,但是在 Lambda 表达式中可以直接访问外层的局部变量,但是这个局部变量必须是声明为 final 的。就可以访问到了
final int delta = 10;
BinaryOperator<Integer> add = (x, y) -> x+y+delta;
Integer apply = add.apply(1, 2);//结果是13
System.out.println(apply);//输出13
如果这个变量是一个既成事实上的 final
变量的话,就可以不使用 final 关键字,这个地方有一些抽象,所以可以自习理解一下。
例如在上面代码块中把final
去掉:
int delta = 10;
BinaryOperator<Integer> add = (x, y) -> x+y+delta;
Integer apply = add.apply(1, 2);//结果是13
System.out.println(apply);//输出13
都是可以的。
2 在 Lambda 表达式当中被引用的变量的值不可以被更改
在idea编译器中可以看到,上面这段代码是不会报错的。
但是如果,我在代码中某处改变了已经被引用的,就会编译报错:
可以看一下报错信息,所以应当引用值不能被改变。
3 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量
就是说,不许同名。
4 写在最后
这个变量的访问与修改只知道这么多,再具体点就像茶壶煮饺子,有知识但是写不出来。
本人的水平还是太低了,如果以后提高了会在进行补充。