在这个例子中,声明Object final
提供了什么价值?
private void doSomethingClever(final Object o) {
}
这样做的目的是让其他人来访问您的代码知道参数不能更改。如果他们设置了一个值,则会导致编译器错误。
您将无法o
在方法中分配给。
当有一个内部类(例如侦听器或一些可运行的访问此局部变量)时,它非常有用。
老实说,我并没有真正看到在方法参数中使用 final 的意义。final 只会保证变量不会指向另一个对象,而不是对象本身不会是不可变的......您可以更改对象 o 的状态,您只是不能将 o 分配给另一个对象,例如 B
o = new Object();
或者
Object b = new Object();
o=b;
但调用
o.doSomething();
很好。那么为什么到处都是丑陋的最终关键字使代码混乱呢?
至于性能优化,我相信即使方法参数中没有 final 关键字,现代编译器也会分析和优化代码。有人愿意纠正我吗,因为我不是 100% 确定这一点!