final关键字的作用
LinkedList中Node是一个对象,因此适用于第二条引用数据类型,举个例子:
People p1 = new People(18,"张三"); People p2 = p1;
当:p1 = null;或者p1 = new People(20,“李四”);
实际上是栈中的p1存储的地址改变,但堆空间中之前 new People(18,“张三”);的对象仍然存在。因此p2不受影响
当:p1.setAge(21); 此时操作的是堆空间中的唯一对象,p2会受到影响
在源码中:
final E element = x.item; final Node<E> next = x.next; final Node<E> prev = x.prev;
使得element next prev三个属性栈空间保存的地址不可再被重定向,但可以修改值,例如:next.prev = prev和prev.next=next 可以对栈所指向的堆成员变量进行修改
参考链接:
https://www.cnblogs.com/noteless/p/10416678.html
https://www.cnblogs.com/noteless/p/10410368.html
https://www.cnblogs.com/mianlaoshu/articles/3648403.html
https://www.cnblogs.com/maxiaopao/p/9212903.html
https://zhuanlan.zhihu.com/p/88775601
https://www.zhihu.com/question/21762917/answer/19239387
第四条链接中讲final的优点很详细
第五条讲到了重排序
第六条是JVM对方法中的final变量性能调优
参考阿里巴巴的开发手册
不允许修改的局部变量声明为final更多的是一种规范,在实质作用上加与不加没有区别,但他就是个规范。排除任何可能对这个变量进行修改的可能性
本问题花了我14个小时,查阅了无数资料,问了无数的人,最后能总结出来的答案就是:规范
hhhh浪费了我一天的宝贵时间