String类
解析String c = a + b实现过程
String a = "hello";
String b = "world";
String c = a + b;
//通过字符串的引用拼接
String c2 = "hello" + "world";
//直接通过字符串拼接

- 首先底层使用StringBuilder在堆中实例化一个对象。
- 然后使用append方法依次拼接字符串。
//底层运行原理
StringBuilder stb = new StringBuild();
stb.append(a);
stb.append(b);
存放地址分析
- String c = a + b;在创建过程中通过实例化StringBuilder对象产生,所以 c 变量应该指向堆中的对象地址,堆中的对象再指向常量池中的"helloworld"地址。
- String c2 = “hello” + “world”;为直接拼接的字符串,所以 c2 变量直接指向常量池中的"helloworld"地址。
JVM内存分析

存放地址论证
//对比论证
System.out.println(c == c2);
//输出为flase
System.out.println(c.equals(c2));
//输出为true
补充
注:如果想让 c 直接指向常量池中字符串地址,可以使用intern()方法。
String c = (a + b).intern();
本文详细解析了String类中'a+b'与'+操作的区别,介绍了StringBuilder在拼接过程中的作用,以及JVM内存中字符串对象和常量池的关系。通过实例和内存分析,展示了变量c与c2的存放地址对比,并探讨了如何使c指向常量池的方法。
860

被折叠的 条评论
为什么被折叠?



