java中的字符串(String)常量池理解

下面创建String对象的方式一样吗?

上述程序创建对象类似,为什么s1和s2引用对象一样,但是s3和s4不一样呢?

在java程序中,许多基本类型的字面常量会经常用到,例如2,3.11,“hyy”等。为了提升程序的运行效率,节省内存,java为八种基本数据类型(int float long double char byte boolean short)提供了常量池

池是编程中,常见的提高效率的一种方式。

例如:

家庭条件不是太好的人,每个月定期打生活费,但有时紧急情况,急需用钱,需要打电话找父母要,比较麻烦,费时间。

如果家里有矿,父母直接把一整年的生活费都放到卡里,随用随取,很方便,效率就更高。

常量池有很多,今天我们聚焦学习字符串常量池(StringTable)

字符串常量池在JVM中是,StringTable类,实际上底层就是固定大小的HashTalble(一种搜索效率很高的数据结构,详细见【什么是哈希表(HashTable)? - CSDN App】)

好回到刚才提到的问题,为什么s1==s2?

s1和s2都是用“”双引号创建的String对象,这种创建方式的特点是至多只会创建一个相同的对象

在最初创建“hello”时,首先会用StringTable(也就是字符串常量池)寻找是否有“hello”,

如果没有:

创建一个创建一个指向“hello”的对象,然后返回指向这个对象的引用。

如果有:

直接返回指向“hello”对象的引用。


而对于s3和s4这种new String对象的创建方式,特点是

至少会创建一个对象(在堆区)

因此,s3(s3创建了两个对象,一个在字符串常量池一个在堆区)和s4(s4创建了一个对象,在堆区)分别都创建了至少一个对象,其引用,自然也就不一样。

关于字符串常量池的形象理解(看懂就会了)

注意虽然两种创建方式,一定会在常量池创建一个对象,但是两个对象是分开创建的,不是在常量池共用一个对象。

另外,关于字符串常量池,介绍一个方法:

intern()方法

观察这个程序:

如果理解前文所说的,s2==s3是false就很好理解了。

那么intern()是用来干嘛的呢?

英文就是“进入”的意思:

调用完这个方法后,我们发现,s2真的等于s3了!

这就是intern()方法的作用(手动入池):

可以把没有(有,就不塞)在常量池中的String对象,塞进字符串常量池。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等的介绍

文章目录 前言一、为什么存在动态内存管理二、动态内存函数的介绍1. malloc函数2. 内存泄漏3. 动态内存开辟位置4. free函数5. calloc 函数6. realloc 函数7. realloc 传空指针 总结 前言 C语言动态内存管理malloc、calloc、realloc、free函数、内存泄漏、动态内存开辟的位置等…

25.哀家要长脑子了---哈希表

1.525. 连续数组 - 力扣(LeetCode) 在我对通义千问的一番折磨下,终于弄清楚一点点了。哈希表存储前缀和数组值 用一个counter来记录nums中0、1数量差值的变化。 哈希表map存储某个特定的counter值首次出现的位置。counter的计算:…

【LeetCode 121】买卖股票的最佳时机

思路 思路: 所谓代码的复杂性来源于业务的复杂性,如果能够想清楚业务实现逻辑,就能够轻松写出代码; 假设当前是第i天,如何在第i天赚到最多的钱?需要在第i天之前以最低价买入股票; 所以需要求…

13 【PS作图】人物绘画理论-脸型

三庭五眼 三庭:脸的长度比例 (1)发际线到眉毛 (2)眉毛到鼻底 (3)鼻底到下巴 三个部分大致为三等分 五眼:脸的宽度比例 以眼睛长度为单位,把脸的宽度分成五等分&#x…

[极客大挑战 2019]PHP

1.通过目录扫描找到它的备份文件,这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。 我们提交的select参数会被进行反序列化,我们要构造符合输出flag条件的序列化数据。 但是,这里要注意的就是我们提…

求解亲和数

【问题描述】 古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身 的约数)之和为: 1245101120224455110284。而284的所有真约数为1、2、4、71、142,加起来恰好为220。人 们对这样的数感到很惊奇&am…

五种主流数据库:窗口函数

SQL 窗口函数为在线分析系统(OLAP)和商业智能(BI)提供了复杂分析和报表统计的功能,例如产品的累计销量统计、分类排名、同比/环比分析等。这些功能通常很难通过聚合函数和分组操作来实现。 本文比较了五种主流数据库实…

嵌入式学习67-C++(多线程,自定义信号合槽,串口通信)

知识零碎: QmessageBox 报错提示框 GPS传感器获取到的 经纬度信息并不是真实的物理坐标,还需要转换 signals: …

【JAVA入门】Day03 - 数组

【JAVA入门】Day03 - 数组 文章目录 【JAVA入门】Day03 - 数组一、数组的概念二、数组的定义2.1 数组的静态初始化2.2 数组的地址值2.3 数组元素的访问2.4 数组遍历2.5 数组的动态初始化2.6 数组的常见操作2.7 数组的内存分配2.7.1 Java内存分配2.7.2 数组的内存图 一、数组的概…

234234235

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

周刊是聪明人筛选优质知识的聪明手段!

这是一个信息过载的时代,也是一个信息匮乏的时代。 这种矛盾的现象在 Python 编程语言上的表现非常明显。 它是常年高居编程语言排行榜的最流行语言之一,在国外发展得如火如荼,开发者、项目、文章、播客、会议活动等相关信息如海如潮。 但…

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的: X-Forwarded-For/Client-ip:修改来源ip via:修改代理服务器 还有一些常见的字段: GET:此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…

QTday1

1、QT思维导图 2、自由发挥应用场景,实现登录 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->resize(642,493);this->setFixedSize(642,493);this->setWindowIcon(QIcon("D:/QTText/pictrue/qq.png…

Windows系统本地部署Net2FTP文件管理网站并实现远程连接上传下载

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人…

Vue入门到关门之Vue高级用法

一、在vue项目中使用ref属性 ref 属性是 Vue.js 中用于获取对 DOM 元素或组件实例的引用的属性。通过在普通标签上或组件上添加 ref 属性,我们可以在 JavaScript 代码中使用 this.$refs.xxx 来访问对应的 DOM 元素或组件实例。 放在普通标签上,通过 th…

CRE-LLM:告别复杂特征工程,直接关系抽取

CRE-LLM:告别复杂特征工程,直接关系抽取 提出背景CRE-LLM 宏观分析CRE-LLM 微观分析1. 构建指令集(Instruction Design)2. 高效微调大型语言模型(Efficient Fine-Tuning on LLMs)3. 方法讨论(Di…

数据结构——链表专题2

文章目录 一、返回倒数第k 个节点二、链表的回文结构三、相交链表 一、返回倒数第k 个节点 原题链接:返回倒数第k 个节点 利用快慢指针的方法:先让fast走k步,然后fast和slow一起走,直到fast为空,最后slow指向的结点就…

智慧工地)智慧工地标准化方案(107页)

2.2 设计思路 对于某某智慧工地管理系统的建设,绝不是对各个子系统进行简单堆砌,而是在满足各子系统功能的基础上,寻求内部各子系统之间、与外部其它智能化系统之间的完美结合。系统主要依托于智慧工地管理平台,来实现对众多子系统…

动态规划算法:路径问题

例题一 解法(动态规划): 算法思路: 1. 状态表⽰: 对于这种「路径类」的问题,我们的状态表⽰⼀般有两种形式: i. 从 [i, j] 位置出发,巴拉巴拉; ii. 从起始位置出…

《自动机理论、语言和计算导论》阅读笔记:p428-p525

《自动机理论、语言和计算导论》学习第 14 天,p428-p525总结,总计 98 页。 一、技术总结 1.Kruskal’s algorithm(克鲁斯克尔算法) 2.NP-Complete Problems p434, We say L is NP-complete if the following statements are true about L: (1)L is …