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();