「JavaSE」String类3:字符串常量池

🎇个人主页:Ice_Sugar_7
🎇所属专栏:快来卷Java啦
🎇欢迎点赞收藏加关注哦!

字符串常量池

  • 🍉常量池
  • 🍉字符串常量池
  • 🍉intern 方法

🍉常量池

在Java程序中,类似于:1,2,3,3.14,“hello”等字面类型的常量经常频繁使用,为了使程序的运行速度更快、更节省内存,Java为8种基本数据类型和String类都提供了常量池

🍉字符串常量池

字符串常量池在JVM中是StringTable类,实际是一个固定大小的HashTable(它是哈希表的一种实现,但由于其同步性能较差,所以在新的代码中通常用ConcurrentHashMap来代替它)

字符串常量池用于存储字符串常量。当创建字符串常量时,如果常量池中已经存在该字符串,则新的常量将指向已存在的字符串,不会重新创建一个新的字符串对象,这样可以节省内存空间并提高效率

注意:只要是双引号引起来的,都会被存放到常量池中;而如果通过 new 来创建一个 String 对象,则不会将该对象的引用存入常量池

我们可以使用双引号来创建字符串常量,举个例子:

比较下面四个字符串的地址

    public static void main(String[] args) {String s1 = "hello";String s2 = "hello";String s3 = new String("world");String s4 = new String("world");System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s3 == s4);}

得到如下结果:
在这里插入图片描述

  • 创建 s1 时,将它所指的字符串常量存进常量池。当创建 s2 时,在常量池中找到了 hello ,所以直接让 s2 指向它,即 s1 和 s2 的地址是一样的
  • 创建 s3 时,会在堆区 new 一个 String 对象,其 value 指向字符数组(存放 world ),同时将 world 存进常量池(在哈希表中新建一个节点,节点包含一个 String 对象的引用,该引用所指对象的 value 指向上述字符数组)
  • 创建 s4 时,也会 new 一个对象,因为常量池中已经有 world 了,所以该对象的 value 直接指向存放 world 的数组

在这里插入图片描述

🍉intern 方法

intern 的作用是手动将创建的String对象添加到常量池中,举个例子:

    public static void main(String[] args) {char[] ch = new char[]{'a', 'b', 'c'};String s1 = new String(ch); // s1对象并不在常量池中//s1.intern(); // s1.intern();调用之后,会将s1对象的引用放入到常量池中String s2 = "abc"; //常量池中已经有"abc"了,创建s2时直接用常量池中"abc"的引用System.out.println(s1 == s2);}//如果s1没有调用intern,那么就会输出false//若有调用,则输出true

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

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

相关文章

微服务-Alibaba微服务nacos实战

1. Nacos配置中心 1.1 微服务为什么需要配置中心 在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此&…

*MYSQL--索引--内部原理

MYSQL的索引根据功能,主要有三大类型: 1.HASH索引 2.二叉树 3.BTREE索引 一:HASH索引 1.内部原理: 在设置了某列为索引列之后,并且开始或者将要在相应索引列创建数据的时候,系统通过某种算法 F(X) 自动计算出来一个十六进制的哈希值,这个哈希值能够对应相应的字段值 所以…

数据之巅:揭秘企业数据分析师如何成为企业的决策智囊

引言 在数字化浪潮中,企业数据分析师已成为企业决策的重要支撑。他们如同探险家,在数据的丛林中寻找着能够指引企业前行的宝贵信息。本文将深入剖析企业数据分析师的角色、挑战与成就,带你领略这个充满智慧与激情的职业风采。 一、从数字到智…

28-k8s集群中-StatefulSets控制器(进阶知识)

一、statefullsets控制器概述 1,举例 假如,我们有一个deployment资源,创建了3个nginx的副本,对于nginx来讲,它是不区分启动或者关闭的先后顺序的,也就是“没有特殊状态”的一个服务,也成“无状…

十四届蓝桥杯国赛考试计算思维 U10 组真题和答案

答案在底部 第一题 恐龙乐园的规划图中有 n 个小岛,m 座小桥,每座桥连接两个小岛。 下图是 n=5,m=8 的一个例子: 希希发现,如果拆除一些桥,仍然能使任何两个小岛都互通。最多可以拆除( )座 桥。 A. n-m B. m-n C. m-m-1 D. m-n+1 第二题

探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,并且坚持默默的做事。 探索设计模式的魅力:状态模式揭秘-如何优雅地处理复杂状态转换 文章目录 一、案例…

VUE3使用three.js显示3D模型

使用3D模型作为自动化系统的界面已经成为潮流。尽管在AutomationML 中推荐COLLADA作为 3D 模型的标准。但是COLLADA的开发者khronos 集团却已经开发了COLLADA的后继者glTF 。glTF 2.0已经成为国际标准ISO/IEC 12113:2022。 Khronos声称-‘glTF是3D里的JPEG’。目前看来glTF 更加…

问题慢慢解决-通过android emulator调试android kernel-内核条件断点遇到的问题和临时解决方案

起因 在摸索到这个方案之后,mac m1调试aarch64 android kernel最终方案,就准备调试内核了,预备下断点的地方是 b binder_poll b ep_ptable_queue_proc b remove_wait_queue但是由于是android系统,上面三个函数会被频繁的触发&am…

ElementUI table表格组件实现双击编辑单元格失去焦点还原,支持多单元格

在使用ElementUI table表格组件时有时需要双击单元格显示编辑状态,失去焦点时还原表格显示。 实现思路: 在数据中增加isFocus:false.控制是否显示在table中用cell-dblclick双击方法 先看效果: 上源码:在表格模板中用scope.row…

springboot集成mqtt

文章目录 前言一、MQTT是什么?二、继承步骤1.安装MQTT2.创建项目,引入依赖3. 对应步骤2的代码3 测试 总结mqtt 启动后访问地址 前言 随着物联网的火热,MQTT的应用逐渐增多 曾经也有幸使用过mqtt,今天正好总结下MQTT的使用; 一、MQTT是什么?…

从扩散模型基础到DIT

Diffusion model 扩散模型如何工作? 输入随机噪声和文本内容,通过多次预测并去除图片中的噪声后,最终生成清晰的图像。 以上左边这张图,刚开始是随机噪声,999为时间序列。 为什么不直接预测下一张图片呢?…

springboot+vue的宠物咖啡馆平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【深度学习笔记】3_4 逻辑回归之softmax-regression

3.4 softmax回归 Softmax回归(Softmax Regression),也称为多类逻辑回归(Multinomial Logistic Regression),是一种用于多分类问题的分类算法。虽然名字里面带回归,实际上是分类。 前几节介绍的…

Rust之构建命令行程序(四):用TDD(测试-驱动-开发)模式来开发库的功能

开发环境 Windows 11Rust 1.75.0 VS Code 1.86.2 项目工程 这次创建了新的工程minigrep. 用测试-驱动模式来开发库的功能 既然我们已经将逻辑提取到src/lib.rs中,并将参数收集和错误处理留在src/main.rs中,那么为代码的核心功能编写测试就容易多了。我…

【MATLAB源码-第146期】基于matlab的信源编码仿真GUI,对比霍夫曼编码,算术编码和LZ编码。

操作环境: MATLAB 2022a 1、算法描述 霍夫曼编码、算术编码和LZ编码是三种广泛应用于数据压缩领域的编码技术。它们各自拥有独特的设计哲学、实现方式和适用场景,因此在压缩效率、编解码速度和内存使用等方面表现出不同的特点。接下来详细描述这三种编…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(7)特征构造

特征分析之后,就是特征构造。 特征构造第一步 特征构造往往要进行数据的归一化。 在本案例中,我们将所有的数据,将所有特征区间调整为0~1之间。 如上图。 那么,为什么要进行归一化,又如何将数据,调整为…

QtCreator“设计”按钮灰色无法点击,如何解决

Mac中安装QML Designer插件: 首选项-> 关于插件 -> 勾选QT Quick下的QML Designer 点击确定安装插件,重启Qt Creator后生效

【Langchain多Agent实践】一个有推销功能的旅游聊天机器人

【LangchainStreamlit】旅游聊天机器人_langchain streamlit-CSDN博客 视频讲解地址:【Langchain Agent】带推销功能的旅游聊天机器人_哔哩哔哩_bilibili 体验地址: http://101.33.225.241:8503/ github地址:GitHub - jerry1900/langcha…

【达梦数据库】数据库的方言问题导致的启动失败

问题场景 在项目中采用了hibernate ,连接数据库原本为ORACLE,后续打算改造为国产数据库 达梦 链接配置: # 达梦写法, index:driver-class-name: dm.jdbc.driver.DmDriverjdbc-url: jdbc:dm://192.168.220.225:5236/IDX4username:…

【QT 5 +Linux下软件生成+qt软件生成使用工具+学习他人文章+第一篇:使用linuxdeployqt软件生成】

【QT 5 Linux下软件生成qt软件生成使用工具学习他人文章第一篇:使用linuxdeployqt软件生成】 1、前言2、实验环境3、自我学习总结-本篇总结1、新手的疑问,做这件事的目的2、了解工具:linuxdeployqt工具3、解决相关使用过程中问题 4、参照文章…