「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.hqwc.cn/news/488186.html

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

相关文章

dpdk环境搭建和工作原理

文章目录 1、DPDK环境搭建1.1、环境搭建1.2、编译DPDK 2、DPDK工作原理 1、DPDK环境搭建 1.1、环境搭建 工具准备:VMware、ubuntu16.04。 (1)VMware添加两个网卡。桥接网卡作为 DPDK 运行的网卡,NAT 网卡作为 ssh 连接的网卡。 …

Python算法题集_图论(课程表)

Python算法题集_课程表 题207:课程表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【循环递归全算】2) 改进版一【循环递归缓存】3) 改进版二【循环递归缓存反向计算】4) 改进版三【迭代剥离计数器检测】 4. 最优算法5. 相关资源 本…

台式电脑电源功率越大越费电吗?装机选购多少W电源

要组装一台电脑,我们首先需要选择硬件。 硬件搭配最关键的一点就是CPU和主板的兼容性。 硬件、电源等之间的平衡都需要仔细考虑。 那么台式电脑电源多大功率合适呢? 下面分享组装电脑电源瓦数选购指南,教您正确选择合适的电源瓦数。 让我们来…

爬取m3u8视频

网址:https://www.bhlsm.com/cupfoxplay/609-3-1/ 相关代码: #采集网址:https://www.bhlsm.com/cupfoxplay/609-3-1/ #正常视频网站:完整视频内容 # pip install pycryptodomex #流媒体文件:M3U8(把完整的…

Python is not set from command line or npm configuration 报错解决

问题 在 npm install 的过程中提示 Python is not set from command line or npm configuration 的报错,相信不少朋友都遇到过,出现这个问题的原因是缺少 python 环境所导致的。 解决方法 1、安装 python 官网:https://www.python.org/dow…

Spring篇----第四篇

系列文章目录 文章目录 系列文章目录前言一、区分构造函数注入和 setter 注入二、spring 中有多少种 IOC 容器?三、区分 BeanFactory 和 ApplicationContext。四、列举 IoC 的一些好处。前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大…

# 浅析DPDK内存管理:Mempool

文章目录 前言Mempool工作机制Mempool数据结构rte_mempool_opsMempool操作接口rte_mempool_create:创建Mempoolrte_mempool_get:申请对象rte_mempool_put:释放对象 相关参考 前言 DPDK提供了一套内存池管理机制,以提供高效分配固…

XFF伪造 [MRCTF2020]PYWebsite1

打开题目 直接查看源码 看到一个./flag.php 访问一下 购买者的ip已经被记录,本地可以看到flag,那么使用xff或者client-ip伪造一下ip试试 bp抓包 加一个X-Forwarded-For头 得到flag

Three.js加载PLY文件

这是官方的例子 three.js webgl - PLY 我在Vue3中使用&#xff0c;测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…

Pytorch 自用 Scheduler 分享

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

智慧公厕与智慧驿站:城市未来公共厕所的革命性升级

在当今社会&#xff0c;智慧公厕已经成为城市建设中一个备受关注的话题。智慧公厕究竟是什么&#xff1f;它代表了未来式的公共厕所&#xff0c;在使用方式、服务方式、管理方式、协作方式上均是变革式的升级。随着科技的进步和城市化的发展&#xff0c;智慧公厕的未来发展趋势…

机器学习系列-生成模型和判别模型

文章目录 前言1.生成模型和判别模型2.常见的生成模型和判别模型3.判别式模型和生成式模型的优缺点 前言 监督学习模型可以分为生成模型(generative model)和判别模型(discriminative model) 1.生成模型和判别模型 判别模型由数据直接学习决策函数 f ( x ) f(x) f(x)或者条件…