1. 局部变量的引用
在 JDK 源码中可以看到会用到 final 的局部变量引用对象的属性, 如像 ArrayBlockingQueue 中:
1 | public E poll() { |
这样做有什么好处呢?
首先代码逻辑没有任何问题.
假如我们直接 this.lock, 会在字节码中产生如下操作:
1 | aload_0 # 表示当前对象 |
但是加入使用 final ReentrantLock lock = this.lock;, 就会少一个 getfield, 程序会直接从堆栈中取属性的引用, 这样会更快.