String的内存分析

【1】字符串拼接:

复制代码
public class Test02 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        String s1="a"+"b"+"c";
        String s2="a"+"bc";
        String s3="ab"+"c";
        String s4="abc";
        String s5="abc"+"";
    }

}
复制代码

上面的字符串会进行编译器优化,直接合并成完整的字符串,我们可以反编译验证:

 

 然后再常量池中,常量池的特点是第一次如果没有这个字符串,就放进去,如果有这个字符串 就直接从常量池中取

 

 【2】new关键字创建对象

String S6=new String("abc");

内存:开辟两个空间(1.字符串常量池中的字符串2.堆中的开辟的空间)

 

 【3】有变量参与的字符串拼接:

复制代码
public class Test03 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        String a="abc";
        String b=a+"def";
        System.out.println(b);
    }

}
复制代码

a变量在编译的时候不知道a是“abc”字符串,所以不会进行编译期优化,不会直接合并为“abcdef”

反汇编过程:为了更好的帮我分析字节码文件是如何解析的:

利用IDEA中控制台

 

posted @   爱的加勒比  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示