比如一段LinkedList里面的代码
public E getFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
加个final有什么好处?
写成这样不就行了:
public E getFirst() {
if (first == null)
throw new NoSuchElementException();
return first.item;
}还有一些代码喜欢在catch(final Exception e)里面加final,又有什么内幕?final
public E getFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
加个final有什么好处?
写成这样不就行了:
public E getFirst() {
if (first == null)
throw new NoSuchElementException();
return first.item;
}还有一些代码喜欢在catch(final Exception e)里面加final,又有什么内幕?final
解决方案 »
- 一个小问题:A类调用B类的方法address(),怎么实现address()能够返回A类的路径
- SSH2搭建项目时遇到的问题:谁来帮我解决下:
- SQL语句中加@有什么含义。。
- 周日各位大侠还在吗?来帮个忙,关于页面缓存问题的;(在线求解)
- SQLserver2008如何自己导入文件
- j2ee 短信
- 大家帮我看看hibernate这入门小例子有错?
- Struts中session的使用
- VelocityViewServlet : Error processing the template
- tomcat下能写电子邮件系统吗
- 如何在js中去掉json数据中的转义附
- 一个关于JMS的问题,长期使用造成死机
优势就是提高了安全性。。
没举例子不生动,可以举例子打字太多太累。。
不可变的是f,内部变量不可变有什么用,就函数内部的几行代码,有必要设防吗?
据说加了final会提高效率,因为如果指定一个类为final,则该类所有的方法都是final。Java编译器会寻找机会内联(inline)所有的 final方法(这和具体的编译器实现有关)。
虽然我从来没用自己测试过。
1、防止自己或者其他人修改变量,以避免失误写错。
2、方法的内部类会将方法的局部final变量拷贝到自己的域中,从而可以用到局部变量
3、便于编译器进行编译的优化。
这里面,2这个说法是正确的,我看了class文件,确实final变量被编译到局部方法的内部类中取了。如果有这种应用场景,那只能如此了。1完全是编码风格问题,有的人喜欢final,有的人讨厌final。比如LinkedList里面到处是final变量,但是在Collections里面,根本没有一个final修饰局部变量。3的话,真没看出来。不管是不是final的,局部变量就是局部变量,占用的还是那个Slot,生命周期也是一样的,哪有什么效率差别。