Java 中 String str = new String(“hello“); 里面创建了几个对象?

文章目录

        • [1. 字符串常量池](#1. 字符串常量池)
        • [2. 创建对象分析](#2. 创建对象分析)
        • [3. 总结](#3. 总结)
        • [4. 推荐的做法](#4. 推荐的做法)
        • 推荐阅读文章

在Java中,字符串的处理是一个重要且常见的操作。尤其是 String类的使用,常常让初学者感到困惑。今天,我们就来详细分析一下这行代码: String str = new String("hello");,并弄清楚在这行代码中究竟创建了几个对象。

1. 字符串常量池

在Java中,字符串字面量(如"hello")会被存储在一个特殊的内存区域,称为字符串常量池(String Pool)。这个池中的字符串是不可变的,也就是说,一旦创建后,它们的值就不能更改。

2. 创建对象分析

当你执行String str = new String("hello");时,实际上创建了两个对象:

  1. 字符串字面量对象"hello"是一个字符串字面量,在编译时就被放入了字符串常量池中。这个对象在常量池中存在,即使之后不再使用,常量池中的内容也不会被垃圾回收。

  2. String对象new String("hello")会在堆内存中创建一个新的String对象,并将常量池中的"hello"的内容复制到这个新对象中。因此,堆中又多了一个String对象。

3. 总结

综上所述,执行String str = new String("hello");时,总共创建了两个对象:

  • 一个在字符串常量池中的"hello"对象。
  • 一个在堆内存中的String对象。

这段代码示例的对象创建过程如下图所示:

复制代码
+-----------------+        +-----------------+
| String Pool     |        | Heap            |
+-----------------+        +-----------------+
| "hello"         |        | String: "hello" |
+-----------------+        +-----------------+
4. 推荐的做法

虽然使用new String("hello")可以创建一个新的String对象,但在大多数情况下,推荐使用字符串字面量(例如String str = "hello";),这样可以避免不必要的对象创建,节省内存和提高性能。因为字符串常量池会对相同的字符串进行重用,只有在需要明确创建新对象时,才使用new关键字。

希望通过这篇文章,你能清楚地理解String str = new String("hello");中创建的对象数量,以及在实际开发中如何更高效地使用字符串!

推荐阅读文章
相关推荐
隐积9 小时前
3.1.7.Qt容器大家族(3):QVariant——万能盒子
开发语言·qt
都叫我大帅哥11 小时前
Java JJWT 完全指南:从入门到生产级实践
java
名字还没想好☜11 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
初级代码游戏12 小时前
iOS开发 Swift 速记1:变量和基本数据类型
开发语言·ios·swift
前端开发张小七12 小时前
Java 学习笔记 · 第一课:基础语法与核心概念
java·后端
酷在前行13 小时前
【R生态】PERMANOVA 进阶实战:距离选择、PERMDISP、两两比较与受限置换(保姆级教程)
开发语言·r语言
ThsPool13 小时前
【ENVI二次开发学习整理 04】ENVI功能扩展与二次开发
java·前端·javascript
cxr82813 小时前
Graphify vs GitNexus vs CodeGraph — 三工具架构深度对比
开发语言·架构·知识图谱
赤壁小虾13 小时前
【渲染流水线】[逐片元阶段]-[透明度测试]以UnityURP为例
java·前端·数据库
废弃的小码农15 小时前
功能测试--Day07--Python编程基础
开发语言·python