String类地址存放分析

目录

  • String类
    • 解析String c = a + b实现过程
    • 存放地址分析
    • JVM内存分析
    • 存放地址论证
    • 补充

String类


解析String c = a + b实现过程

String a = "hello";
String b = "world";
String c = a + b;
//通过字符串的引用拼接
String c2 = "hello" + "world";
//直接通过字符串拼接

String类地址存放分析_第1张图片

  1. 首先底层使用StringBuilder在堆中实例化一个对象。
  2. 然后使用append方法依次拼接字符串。
//底层运行原理
StringBuilder stb = new StringBuild();
stb.append(a);
stb.append(b);

存放地址分析

  1. String c = a + b;在创建过程中通过实例化StringBuilder对象产生,所以 c 变量应该指向堆中的对象地址,堆中的对象再指向常量池中的"helloworld"地址。
  2. String c2 = “hello” + “world”;为直接拼接的字符串,所以 c2 变量直接指向常量池中的"helloworld"地址。

JVM内存分析

String类地址存放分析_第2张图片

存放地址论证

//对比论证
System.out.println(c == c2);
//输出为flase
System.out.println(c.equals(c2));
//输出为true

补充

注:如果想让 c 直接指向常量池中字符串地址,可以使用intern()方法。

String c = (a + b).intern();

你可能感兴趣的:(java,jvm,java,开发语言)