今天碰到一个题目,经过类名引用final静态字符串变量时,是否会触发类的初始化。spa
原来在书上看到类的初始化时机有这么一句话“读取或设置一个类的静态变量(被final修饰,已在编译期把结果放入常量池的静态字段除外)”对象
两部分都很重要!blog
今天发现给final变量赋值“sss”和new String(“sss”)是不一样的效果。字符串
图一编译
图二变量
仔细读那句话,图一在编译期就把“sss”放入了常量池(类加载的准备阶段完成赋值),而图二new String(“sss”)至关于一个对象,是在堆中的,因此是等到类初始化以后,才进行赋值。因此才产生了这样的差别。引用