【Java】字符串常量池

文章目录

  • 一.字符串常量池(StringTable)
    • 1.1 定义
    • 1.2 演示示例
    • 1.3 intern方法


一.字符串常量池(StringTable)

1.1 定义

字符串常量词本质是一个固定大小的HashTable。当用一个字符串构造String对象时,首先会去StringTable中查看是否存在在字符串,如果存在,返回该字符串的引用,如果不存在,将该字符串放入StringTabel并返回引用

如果使用字符串常量去构造String对象,那么编译器会自动放入String Table;
如果使用 new String(“str”) 去构造String对象,则首先会在堆上开辟一份空间,之后会去String Table拿str的引用(拿的规则如上),并给新开辟的空间。

String的成员
如上为String类的成员,可以看到在String中并没有直接存储字符串,而只是通过byte数组存放每个字符。

1.2 演示示例

public class Test {public static void main(String[] args) {String str1="abc";String str2="abc";System.out.println(str1==str2); //true}
}

image-20250713183002507

为什么以下内容为false?

public class Test {public static void main(String[] args) {String str1="abc";String str2="abc";System.out.println(str1==str2); //trueString str1=new String("abc");String str2=new String("abc");System.out.println(str1==str2); //false}
}

image-20250713195214440

new会在堆上开辟空间,这个空间是返回给str的,这不是StringTable的空间,是系统分配的,因此str的地址是不同的。StringTable返回的引用会给new出来的空间。

1.3 intern方法

intern方法的作用为将当前的字符串常量值放入String Table,放入规则与前面的规则一致。

public class Test {public static void main(String[] args) {char[] ch=new char[]{'a','b','c'};String s1=new String(ch); //abc不会放入StringTable,因为不是双引号,不会自动放//s1.intern();String s2="abc";System.out.println(s1==s2);  //写intern为true,不写为false}
}

image-20250713201426556

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89432.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据通信与计算机网络——模拟传输

主要内容数字到模拟转换幅移键控ASK频移键控FSK相移键控PSK正交振幅调制QAM模拟信号调制调幅AM调频FM调相PM一、数字到模拟转换数字信号需要低通通道,如果现实应用中只有带通通道,只能选择模拟信号进行传输。将数字数据转换为带通模拟信号,传…

如何用Python并发下载?深入解析concurrent.futures 与期物机制

concurrent.futures模块的核心价值 Python的concurrent.futures模块提供了线程池(ThreadPoolExecutor)和进程池(ProcessPoolExecutor)两种并发模型,通过高层接口简化并发编程。其核心优势在于: 自动管理资源…

MMKV 存储json list数据(kotlin)

1、添加依赖与初始化 首先在 build.gradle 中添加 MMKV 依赖: implementationcom.tencent:mmkv:1.2.12 在 Application 类中初始化 MMKV: import android.app.Application import com.tencent.mmkv.MMKVclass MyApp : Application() { override fun onCreate() { super.o…

C++ -- STL-- stack and queue

////// 欢迎来到 aramae 的博客,愿 Bug 远离,好运常伴! ////// 博主的Gitee地址:阿拉美 (aramae) - Gitee.com 时代不会辜负长期主义者,愿每一个努力的人都能达到理想的彼岸。1. stack的介绍和使用 2. queue的介绍…

信息论至AI实践:交叉熵的原理全景与应用深度解析

1 定义与数学原理:从信息论到分布差异度量 交叉熵(Cross Entropy)是信息论中用于量化两个概率分布差异的核心概念,由Claude Shannon的信息论发展而来。它测量了在相同事件集合上,使用估计的概率分布q对服从真实概率分…

WAF 能防御哪些攻击?

WAF(Web 应用防火墙)是网站和Web应用的安全守门人,但很多用户对其具体防御范围一知半解。实际上,WAF 能针对性拦截多种网络攻击,从常见的注入攻击到复杂的恶意爬虫,覆盖Web安全的核心威胁。本文详解WAF的防…

闲庭信步使用图像验证平台加速FPGA的开发:第二十二课——图像直方图统计的FPGA实现

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程…

群晖中相册管理 immich大模型的使用

相对于其他的相册管理软件,Immich的智能搜索和人脸识别功能是其优势,通过应用机器学习模型,其智能搜索和人脸识别功能更为先进。 一、大模型的下载与安装 网上有大佬提供了相关大模型的下载:https://url22.ctfile.com/d/58003522…

在 Windows 上使用 Docker 运行 Elastic Open Crawler

作者:来自 Elastic Matt Nowzari 了解如何使用 Docker 在 Windows 环境中运行 Open Crawler。 了解将数据摄取到 Elasticsearch 的不同方式,并深入实践示例,尝试一些新方法。 Elasticsearch 拥有大量新功能,助你为特定场景构建最…

iOS高级开发工程师面试——RunTime

iOS高级开发工程师面试——RunTime 一、简介 二、介绍下 RunTime 的内存模型(isa、对象、类、metaclass、结构体的存储信息等) 对象 类 三、为什么要设计 metaclass ? 四、class_copyIvarList & class_copyPropertyList区别? 五、class_rw_t 和 class_ro_t 的区别? 六…

实现分页查询

分页查询分页查询语句项目中添加分页功能按钮设置前后端代码功能实现分页查询语句 限制查询的 sql 语句: select * from student limit 0,4sql 查询结果如下: 分页查询的每一页都对应一行 sql 语句,若每一行都写单独对应的 sql 语句不仅重复…

[QOI] qoi_desc | qoi_encode | qoi_decode

链接:https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression (看代码设计的时候,真的大为震撼,伟大的algorithm T.T) docs:QOI图像格式 qoi项目提出了Quite OK Image(QOI&am…

智慧城轨可视化:一屏智管全城

图扑智慧城轨可视化系统,把地铁线路、车站、列车都搬进三维画面。列车晚点预警、站台拥挤提示、设备故障定位…… 这些关键信息一屏聚合,调度员能快速调整发车频次,疏导高峰客流。遇上突发情况,系统联动应急方案,同步显…

包新的Git安装与使用教程(2024九月更新)

目录 一、安装git 1.下载git 2.git安装 3.环境变量配置与测试 二、使用教程 1.创建版本库 2.版本回退 3.删除和恢复文件 一、安装git 1.下载git 官方下载地址:https://git-scm.com/download 然后进入以下页面,点击下载链接即可(windows一般都是…

中望3D 2026亮点速递(1)-全新槽功能螺纹功能,减少繁琐操作

本文为CAD芯智库整理,未经允许请勿复制、转载!中望3D 2026全新的槽功能,包括:(1)可快速生成多种槽形;(2)快速生成一个或多个槽;(3)支持…

2025毫米波雷达技术白皮书:智能汽车与物联网的感知核心

随着人工智能、物联网(IoT)和智能汽车产业的迅猛发展,毫米波雷达技术正成为感知领域的核心驱动力。毫米波雷达凭借其高精度、全天候和强抗干扰能力,广泛应用于智能汽车的自动驾驶、物联网的环境感知以及工业自动化。2025年&#x…

用 React-Three-Fiber 实现雪花下落与堆积效果:从零开始的 3D 雪景模拟

在 Web3D 开发中,自然现象模拟一直是极具吸引力的主题。本文将基于 React-Three-Fiber(R3F)框架,详解如何实现一个包含雪花下落、地面堆积的完整雪景效果。我们会从基础粒子系统入手,逐步完善物理交互逻辑,…

从抓包GitHub Copilot认证请求,认识OAuth 2.0技术

引言 在现代开发工具中,GitHub Copilot 以智能、嵌入式的人工智能代码补全能力著称。作为一项涉及用户敏感数据和付费授权的服务,其认证授权流程尤为值得技术研究。本文基于实际抓包 VS Code 中的 Copilot 登录认证请求,系统梳理其 OAuth 2.…

Linux操作系统之线程:分页式存储管理

目录 前言: 一、分页式存储管理 二、二级页表的地址转化 三、缺页中断 总结 前言: 我们上篇文章简单介绍了线程的一些知识点,但是还有很多坑没有给大家填上,包括页表部分我们还没为大家说明。 本篇文章我将会继续为大家讲解…

xss1-8

Level-1<script>alert()</script>基础反射型 无任何过滤Level-2"> <script>alert()</script> <"闭合属性&#xff1a;">用来闭合当前标签的value属性注入新标签&#xff1a;闭合属性后&#xff0c;插入独立的<script>…