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中控制台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)