常州市建设项目审批网站,网站建设竞争对手分析,网站建设教材,做编辑器的网站#xff08;1#xff09;StringTable_编译器优化 “a”“b”对应#4#xff1a;是去常量池中找ab的这个符号
astore 5#xff1a;是把这个存入编号为5的局部变量 “ab”对应的指令 #4#xff0c;跟“a”“b”对应#4下面弄是一样的
在执行s3“ab”这行个代码时#xf…1StringTable_编译器优化 “a”“b”对应#4是去常量池中找ab的这个符号
astore 5是把这个存入编号为5的局部变量 “ab”对应的指令 #4跟“a”“b”对应#4下面弄是一样的
在执行s3“ab”这行个代码时去常量池中找ab这个对象发现串池中没有ab这个对象创建放入串池执行到s5“a”“b”这行代码时去常量池中找ab这个对象串池中有了ab这个对象。不会再创建新的对象了他们的值是相等的 所以astore到 3的变量和astore到 5 的变量都是串池中的ab字符串对象 2StringTable_字符串延迟加载 通过IDEA的Memory查看运行时String对象的个数 跳转下一步 在往下走是上面创建的对象串池中有了不会再创建新的对象啦 3StringTable_intern_1.8 new String(a)new String(b) 底层调用是StringBuild通过newStringab是存放到堆中的
可以通过intern把堆中的对象放到串池中并返回“ab”就不会新建对象了会返回true
最后串池中已有这个ab“ab”就不会新建对象了会返回true 如果先有“ab”下面创建的对象s调用intern方法是因为串池中已经有了所以不会把队中的对象再放入串池而是返回串池中的对象所以s不等于x 4StringTable_intern_1.6 在jdk1.6 1.6的时候把s这个对象拷贝一份放入串池
“ab” 发现串池中已经有了不会重新创建对象相等于的是串池中的对象所以x不等于s这个对象