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();
相关文章
|
18天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
29 0
java基础(13)String类
|
15天前
|
安全 Java
String类-知识回顾①
这篇文章回顾了Java中String类的相关知识点,包括`==`操作符和`equals()`方法的区别、String类对象的不可变性及其好处、String常量池的概念,以及String对象的加法操作。文章通过代码示例详细解释了这些概念,并探讨了使用String常量池时的一些行为。
String类-知识回顾①
|
5天前
|
安全 C语言 C++
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析
26 4
|
5天前
|
存储 编译器 程序员
【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路
【C++篇】手撕 C++ string 类:从零实现到深入剖析的模拟之路
30 2
|
25天前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
|
25天前
|
Java 索引
Java String 类详解
Java 中的 `String` 类用于表示不可变的字符序列,是 Java 标准库 `java.lang` 包的一部分。字符串对象一旦创建,其内容不可更改,修改会生成新对象。
|
3天前
|
C语言 C++
C++番外篇——string类的实现
C++番外篇——string类的实现
16 0
|
3天前
|
C++ 容器
C++入门7——string类的使用-2
C++入门7——string类的使用-2
14 0
|
3天前
|
C语言 C++ 容器
C++入门7——string类的使用-1
C++入门7——string类的使用-1
17 0
|
19天前
|
Java 索引
java基础扫盲-String类常用的方法
java基础扫盲-String类常用的方法