我不保证我的完全正确,但我保证我的这篇文章不是抄的。
这是我在网上找到的面试题,这面试题问的就很傻逼,我自己觉得去纠结什么a在哪就是浪费时间。看下面的代码,然后javap反编译
/*
jdk1.8版本
*/
public class d {
public void test() {
String sss = "a";
String s = new String("a");
}
}
通过Javap 反编译之后结果
这里面的关系我知识有限,我通过javap知道如果是直接赋值a,那么会执行一个new的Java指令,而如果是new一个String,那么就会回执行invokespecial指令。但是两者存储的a这个值都是存放在常量池中,在jdk1.7之后,常量池被移到了Java堆中