当前位置:网站首页>final 原理

final 原理

2022-06-13 09:00:00 Q z1997

设置 final 变量的原理

理解了 volatile 原理,再对比 final 的实现就比较简单了

public class TestFinal {
    
 final int a = 20; 
 }

字节码

0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: bipush 20
7: putfield #2 // Field a:I
 <-- 写屏障
10: return

发现 final 变量的赋值也会通过 putfield 指令来完成,同样在这条指令之后也会加入写屏障,保证在其它线程读到它的值时不会出现为 0 的情况

获取 final 变量的原理

不用使用final (低于short)
在这里插入图片描述

使用final(低于short)
在这里插入图片描述
加 final 使用常量池(高于short)
在这里插入图片描述
不加 final 使用常量池(高于short)
在这里插入图片描述

原网站

版权声明
本文为[Q z1997]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43939924/article/details/125126602