jdk8的lambda表达式以及final理解

这几天写代码的时候碰到一个问题

图一

用的环境是jdk8,所以匿名类是lambda的写法,我记得以前学的时候匿名内部类引用外部局部变量(不是类成员变量)的时候需要申明为final,但是我这里明显没有申明也可以跑。难道语法改了?查了一下才发现,jdk8有个“有效final”的概念,大概意思就是说内部类之后这个引用没有发生变化,那么就可以认为他是一个final。
之后我进行了一些测试,我先进行了重赋值操作,keys=null;发现语法报错。
我又调用了keys.add方法,发现没有问题。由此可知final锁定的是引用(我更喜欢理解为句柄),而不是对象内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,688评论 0 11
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,289评论 0 16
  • 没来过大城市,总觉得一切都是那么好,什么都好,想要什么都有。这是父母的想法。 我想完成他们的梦想,可是自己没动力,...
    古月哈哈阅读 276评论 0 0
  • 良好的睡眠来自于完全的放松,来自于仪式感。 晚上10点不睡觉,会影响肤质,12点不睡觉会影响身体健康。 我们老祖宗...
    MASTERJIANG阅读 107评论 0 0