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

news2024/12/30 3:41:58

🎇个人主页: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.coloradmin.cn/o/1467278.html

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

相关文章

Object.create和Object.setPrototypeOf区别

使用Object.create实现原型继承 function Base() {}Base.prototype.sayfunction(){console.log("base say")}function Derived() {}Derived.prototype Object.create(Base.prototype);Derived.prototype.derivedSayfunction(){} const obj new Derived();console.…

IDEA 重装我都会默默的下载这些好用的插件

本文已经收录公众号:面汤放盐 IDEA 重装我都会默默的下载这些好用的插件 (qq.com) 这几年用得最多的插件,分享给大家。工欲善其事,必先利其器!每一次电脑重装,更换工作,我都会默默地打开我的插件收藏单&a…

一个project作为另一个project的Module

android如何引入另一个工程,Android studio 一个项目引入另一个项目作为Libary-CSDN博客 1.file-new-import module 2.

js使用import到本js文件中的函数时报错 Error [ERR_MODULE_NOT_FOUND]: Cannot find module

node:internal/process/esm_loader:97internalBinding(errors).triggerUncaughtException(^Error [ERR_MODULE_NOT_FOUND]: Cannot find module D:\桌面\Pagesizedetection\lib\screensize imported from D:\桌面\Pagesizedetection\index.js Did you mean to import ../lib/sc…

DAY28--learning English

一、积累 1.hood 2.peripheral 3.gallery 4.cord 5.cart 6.permanent 7.democratic 8.republican 9.bride 10.jet-lagged 11.vet 12.lease 13.landlord 14.aisle 15.lousy 16.via 17.order in 18.forecast 19.initiation 20.credit 二、练习 1.牛津原译 Hood /hʊd/ 1. a par…

操作系统(1)——学习导论(Ⅰ)

目录 小程一言专栏链接: [link](http://t.csdnimg.cn/6grrU) 学习导论什么是操作系统主要功能强调 操作系统历史硬件层面处理器重要特点and功能 存储器磁盘I/O设备小程常用的I/O设备及其特点 小程一言 本操作系统专栏,是小程在学操作系统的过程中的第一步&#xff…

Python奇幻之旅(从入门到入狱基础篇)——面向对象进阶篇(下)

目录 引言 3. 面向对象高级和应用 3.1. 继承【补充】 3.1.1. mro和c3算法 c3算法 一句话搞定继承关系 3.1.2. py2和py3区别 3.3. 异常处理 3.3.1. 异常细分 3.3.2. 自定义异常&抛出异常 3.3.3. 特殊的finally 3.4. 反射 3.4.1. 一些皆对象 3.4.2. import_modu…

document.cookie中expires 格式设置问题导致部分iphone safari上登录失效

一、问题描述 设备信息:iPhone 12, iOS 16.3 昨天有个小伙伴发现自己的iPhone safari打开网页登录时,登录页面显示登录成功,但实际进入首页后仍然显示未登录。多次测试,该问题在该设备上属于必现问题。 二、问题排查与解决 经过…

蓝桥杯:真题讲解2(C++版)附带解析

星系炸弹 来自:2015年六届省赛大学B组真题(共6道题) 分析:这题涉及到平年和闰年的知识,如果我们要解这题,首先要知道每月有多少天,其实也就是看2月份的天数,其它月份的天数都是一样的&#xff…

【开源】JAVA+Vue.js实现校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

多人协作记账账本小程序开源版开发

多人协作记账账本小程序开源版开发 支持多人协作的记账本小程序,可用于家庭,团队,组织以及个人的日常收支情况记录,支持周月年度统计 便捷记账 便捷的记账方式,支持多种记账类型,快捷切换账本等 多账本 支…

如何使用ChatGPT创建一份优质简历

目录 第一步:明确目标和重点 第二步:与ChatGPT建立对话 第三步:整理生成的内容 第四步:注重行文风格 第五步:强调成就和量化结果 第六步:个性化和定制 第七步:反复修改和完善 总结 在现…

MATLAB:数组与矩阵

2.1 数组运算 数组运算时MATLAB计算的基础。由于MATLAB面向对象的特性,这种数值数组称为MATLAN最重要的一种内建数据类型,而数组运算就是定义这种数据结果的方法。 2.1.1 数组的创建和操作 在MATLAB中一般使用方括号“[]”、逗号“,”、空格和分号“;…

Frp 内网穿透服务器基于Docker+Nginx搭建 保姆间级别最细教程

Frp 内网穿透服务器基于DockerNginx搭建 前言介绍 ​ 原先使用的内网穿透服务,natapp、花生壳等三方内网穿透服务,特点方便,但是条数少,有带宽限制,还要实名认证。过于麻烦,自己准备搭建Frp个人穿透服务器…

计算机网络实验八 利用 Java /C++开发网络聊天应用程序

一、实验目的和要求 1)基本掌握利用 Java 开发环境调试应用程序的方法。 2)理解基于套接字开发网络应用程序的过程,深入理解客户/服务器方式工作原理。 3)掌握基于Java和C++开发网络通信程序的方法。 二、实验环境 1)运行 Windows 2008 Server/XP/7 操作系统的 PC 2 台…

python统计分析——线性模型的预测和评估

参考资料:用python动手学统计学 1、导入库 # 导入库 # 导入数据处理的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入绘图的库 from matplotlib import pyplot as plt import seaborn as sns sns.set() # 导入估计…

更简单地介绍 CUDA

这篇文章是对 CUDA 的超级简单介绍,CUDA 是 NVIDIA 流行的并行计算平台和编程模型。我之前在2013年写过一篇文章《CUDA简单介绍》,多年来一直很受欢迎。但 CUDA 编程变得更加容易,GPU 也变得更快,所以是时候进行更新(甚…

【Java程序设计】【C00290】基于Springboot的网上书城管理系统(有论文)

基于Springboot的网上书城管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的网上书城管理系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块:在系统首页可以查看首…

Atcoder ABC340 A-D题解

比赛链接:ABC340 话不多说&#xff0c;看题。 Problem A: 签到。 #include <bits/stdc.h> using namespace std; int main(){int a,b,d;cin>>a>>b>>d;for(int ia;i<b;id)cout<<i<<endl;return 0; } Problem B: 还是签到题。一个v…

潇洒郎:2024 IDEA、Pycharm获取最新激活码获取方式

IDEA获取最新激活码 https://idea.javatiku.cn/ 手机打开&#xff0c;看到验证码&#xff0c;30分钟有效&#xff0c;输入验证码 获取到最新激活码