1、网上有用str==str.intern(),这种方法只能判断该引用是否指向常量池,无论字面量或new String,在intern前后都返回true或false,并无改变。
2、编译阶段编译器是否将字面量存到常量池中?也就是说在程序还没开始运行,甚至类还没加载,常量池中就有值了?
3、new String只在堆区开辟空间,以char[]或byte[]方式在堆区存储,但new String("abc")后括号内的abc也是字面量,根据2,堆和栈中都有值。(两个对象).java文件到.class文件的或称叫编译,执行引擎中还有JIT编译器?求大佬解释
2、编译阶段编译器是否将字面量存到常量池中?也就是说在程序还没开始运行,甚至类还没加载,常量池中就有值了?
3、new String只在堆区开辟空间,以char[]或byte[]方式在堆区存储,但new String("abc")后括号内的abc也是字面量,根据2,堆和栈中都有值。(两个对象).java文件到.class文件的或称叫编译,执行引擎中还有JIT编译器?求大佬解释
2.程序真正运行是加载.class文件,编译只是将java文件转为class文件,并且改class文件可以在在任意符合版本的jvm运行,所以常量池中有值是在类加载才会有的。
4.传统的类加载是解释执行将class文件解释一行执行一行,而jit即时编译是将class文件一次性全部进行编译完成然后执行