final变量的使用&类的初始化

今天碰到一个题目,经过类名引用final静态字符串变量时,是否会触发类的初始化。spa

原来在书上看到类的初始化时机有这么一句话“读取或设置一个类的静态变量(被final修饰已在编译期把结果放入常量池的静态字段除外)”对象

两部分都很重要!blog

今天发现给final变量赋值“sss”和new String(“sss”)是不一样的效果。字符串

图一编译

图二变量

仔细读那句话,图一在编译期就把“sss”放入了常量池(类加载的准备阶段完成赋值),而图二new String(“sss”)至关于一个对象,是在堆中的,因此是等到类初始化以后,才进行赋值。因此才产生了这样的差别。引用

相关文章
相关标签/搜索