字符串常量池

news2024/11/27 4:00:56

1.创建对象的思考

下面两种创建字符串的方式一样吗?

public static void main(String[] args) {
        //两者一样吗
        String s1 = "hello";
        String s2 = "hello";
        String s3 = new String("hello");
        String s4 = new String("hello");
        System.out.println(s1 == s2);
        System.out.println(s3 == s4);
        System.out.println(s1 == s3);
    }

在Java程序中,类似于1,2,3,3.14,“hello"等字面类型的常量经常被频繁的使用,为了使程序更加的节省空间,运行速度更快,Java为8中基本数据类型和String类提供了常量池。

池是一种常见的,重要的提高效率的方式,当我们需要里面的资源时,我们不必重新创建,直接从池中取得相应的资源。

为了节省储存空间以及程序的运行效率,Java中引入了:

  1. Class文件常量池:每个.Java源文件编译后会生成.Class文件,文件中会保存当前类中的字面常量以及符号信息。

  1. 运行时常量池:在.Class文件被加载时,.Class文件中的常量池被加载到内存中称为运行时常量池

  1. 字符常量池

2.字符常量池(StirngTable)

字符常量池在JVM中是StringTable类,实际上是一个固定大小的HashTable,在不同的JDK版本下字符串常量池的位置以及默认的大小是不同的。

3.再谈String对象创建

不同的JDK版本对字符串常量池的处理方式是不同的,我们以Java8 HotSpot上分析

1.直接使用字符串常量赋值

2.通过new创建String类对象

结论:只要是new的对象,都是唯一的。

通过上面的例子,我们发现通过常量字符串创建对象更加的高效。

3.intern方法

intern()是手动将创建的String对象添加到常量池中

//手动将字符串添加到常量池中
    public static void main(String[] args) {
        char[] ch = new char[]{'a', 'b', 'c'};
        String s1 = new String(ch);//这不会将字符串放到常量池里面
        s1.intern();//我们能手动将字符串放到常量池里面
        String s2 = "abc";
        System.out.println(s1 == s2);//此时我们发现它们引用的是同一个对象

    }

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

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

相关文章

11 Advanced CNN

文章目录GoogLeNetInception Module1x1 Conv计算效果代码实现总结ResNet (残差网络)问题引入梯度消失与传统神经网络的比较代码实现课程来源: 链接对于前篇中所提到问题,设计出的是一种类似于LeNet5的线性结构,而对于大多数问题,简…

postgresql 数据库小版本更新

postgresql 数据库小版本更新 记录一次pg小版本更新 文章目录postgresql 数据库小版本更新前言一.下载最新的pg版本 pg11(11.18)二 pg11.5 升级 pg11.18过程1. 查看当前数据库版本:2. 关闭pg11.5数据库3. 安装pg11.184.修改 配置文件5. 重新…

【yolov5】yolov5训练自己的数据集全流程----包含本人设计的快速数据处理脚本

关于yolo应用时能用到的脚本集合,推荐收藏: https://chenlinwei.blog.csdn.net/article/details/127299428 1. 工程化快速yolo训练流程指定版(无讲解) 1.1 抽样数据集xml转txt输出量化分析 python make_dataset.pymake_dataset…

Little Fighter:旺角——NFT 系列来袭!

《小朋友齐打交 2 (LF2) 》是一款流行的格斗游戏,由 Marti Wong 和 Starsky Wong 于 1999 年创作。这是一款非常容易上瘾的游戏,具有多种游戏模式、横向卷轴格斗系统以及 24 个具有复杂动作和连击的不同角色。这款游戏在世界范围内非常受欢迎&#xff0c…

Debain安装命令

目录 一、安装sudo命令 二、安装jdk8 三、更换软件源 四、Debian 安装 yum 五、安装zip、unzip、curl、lrzsz、NUMA 六、安装Maven 五、问题 一、安装sudo命令 1)执行sudo命令,提示 -bash: sudo: command not found的解决方法 apt-get install s…

图像分割方法与问题思考

前言图像分割就是预测图像中每一个像素所属的类别或者物体。图像分割有两个子问题,一个是只预测类别层面的分割,对每个像素标出一个位置。第二个是区分不同物体的个体。应用场景,比如自动驾驶,3D 地图重建,美化图片&am…

Docker-compose 容器集群的快速编排

目录 一、Docker-compose 简介 二、compose 部署 2.1、Docker Compose 环境安装 三、YAML 文件格式及编写注意事项 四、Docker Compose配置常用字段 五、Docker compose 常用命令 六、案例:编写Docker Compose搭建lnmp论坛 6.1、配置nginx 6.2、配置mysql …

Linux查看JVM FULL GC频率

查看系统的full gc频率,可以使用jstack命令一、采用top命令定位进程登录服务器,执行top命令,查看CPU占用情况,找到进程的pid二、使用jstack命令统计垃圾回收jstat -gc pid 5000即会每5秒一次显示进程号为pid的java进程的GC情况以上…

PyTorch学习笔记:nn.ReLU——ReLU激活函数

PyTorch学习笔记:nn.ReLU——ReLU激活函数 torch.nn.ReLU(inplaceFalse)功能:逐元素应用ReLU函数对数据进行激活 函数方程: ReLU(x)(x)max⁡(0,x)ReLU(x)(x)^\max(0,x) ReLU(x)(x)max(0,x) 输入: inplace:是否改变输…

C++004-C++选择与分支1

文章目录C004-C选择与分支1条件表达式条件表达式条件表达式返回值条件语句C实现单if语句题目描述 判断奇数还是偶数题目描述 判断是否及格题目描述 判断是否为0if else语句连续if与if else的差别题目描述 输出绝对值逻辑运算符题目描述 判断程序的输出题目描述 真值表判断题目描…

ElasticSearch-学习笔记04【Java客户端操作索引库】

Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…

一看就会 超简单详细 ChatGPT 注册与使用攻略

OpenAI 新上线的 ChatGPT 可谓是火爆出圈,这个语言对话模型可以回答问题,承认错误,挑战不正确的前提,还能帮你修改代码中的 bug…… ChatGPT 的应用场景很广泛。它可以用于处理多种类型的对话,包括对话机器人、问答机器…

科研试剂供应1476737-97-9,Bis-PEG2-endo-BCN可发生点击反应

●外观以及性质:Bis-PEG2-endo-BCN一般为白色固体,BCN其为点击试剂,点击化学(Click chemistry),又译为“链接化学”、“动态组合化学” (Dynamic Combinatorial Chemistry)、“速配接…

Java面试题:Java集合框架

文章目录一、Java集合框架二、Java集合特性三、各集合类的使用ArrayListLinkedListHashSetHashSet源码解析对源码进行总结HashSet可同步HashSet的使用HashMap四、Iterator迭代器五、遍历集合元素的若干方式参考文章:Hash详解参考文章:深入浅出学Java——…

电子科技大学人工智能期末复习笔记(五):机器学习

目录 前言 监督学习 vs 无监督学习 回归 vs 分类 Regression vs Classification 训练集 vs 测试集 vs 验证集 泛化和过拟合 Generalization & Overfitting 线性分类器 Linear Classifiers 激活函数 - 概率决策 ⚠线性回归 决策树 Decision Trees 决策树构建递归…

uniApp封装一个滑块组件

最近 项目中有一个需求 PC端动态设计的表单 移动端要能渲染出来 那么 就要去找到对应的组件 而其中 没有的 就包括滑块 没有又能怎么办 只能自己封装一个 我们直接上代码 <template><view class"u-slider" tap"onClick" :class"[disabled…

IT行业那么辛苦,我们为什么还要选择它?

疫情三年&#xff0c;我们学会了什么&#xff1f;工作诚可贵&#xff0c;技能价更高。 搞IT辛苦&#xff1f;有啥辛苦的&#xff1f;说什么辛苦&#xff1f;能有工作&#xff0c;工资又高&#xff0c;还要什么自行车&#xff0c;有啥搞啥吧&#xff01;每次看到网络上有人问有…

面试官问:如何确保缓存和数据库的一致性?

如果你对这个问题有过研究&#xff0c;应该可以发现这个问题其实很好回答&#xff0c;如果第一次听到或者第一次遇到这个问题&#xff0c;估计会有点懵&#xff0c;今天我们来聊聊这个话题。 1、问题分析 首先我们来看看为什么会有这个问题&#xff01; 我们在日常开发中&am…

为什么 Web3 社交将超越其 Web2 同行

我们最近听到了很多关于 web3 社交媒体平台的消息。但如果你没有跟上&#xff0c;你可能想知道为什么我们已经有了 Twitter、Facebook、Instagram 等&#xff0c;我们还需要 web3 社交。好吧&#xff0c;这一切都取决于谁拥有权力。 在 web2 中&#xff0c;权力掌握在寻求收入最…

测试开发之Django实战示例 第六章 追踪用户行为

第六章 追踪用户行为在之前的章节里完成了小书签将外站图片保存至本站的功能&#xff0c;并且实现了通过jQuery发送AJAX请求&#xff0c;让用户可以对图片进行喜欢/不喜欢操作。这一章将学习如何创建一个用户关注系统和创建用户行为流数据&#xff0c;还将学习Django的信号框架…