String类地址存放分析

简介: String类地址存放分析

String类


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

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

在这里插入图片描述

  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内存分析

请添加图片描述

存放地址论证

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

补充

注:如果想让 c 直接指向常量池中字符串地址,可以使用intern()方法。
String c = (a + b).intern();
相关文章
|
2月前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
42 0
|
6天前
|
存储 安全 Java
聊聊Java中的常用类String
聊聊Java中的常用类String
11 0
|
15天前
|
存储 安全 C语言
【C++】string类
【C++】string类
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
17天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
27天前
|
存储 算法 C语言
【C++初阶】8. STL初阶 + String类
【C++初阶】8. STL初阶 + String类
51 1
|
27天前
|
C语言 C++
【C++初阶】9. string类的模拟实现
【C++初阶】9. string类的模拟实现
39 1
|
2月前
|
存储 编译器 C++
string类的模拟实现
string类的模拟实现
29 0
|
2月前
|
编译器 Linux C++
string类的函数讲解
string类的函数讲解
15 1
|
2月前
|
存储 缓存 编译器
C++:String类的使用
C++:String类的使用