string.intern()方法理解
String.intern()方法介绍
字符串常量池
- 在jdk7中,字符串常量池和静态变量都存储在堆中。
- 直接使用双引号声明出来的
String
对象会直接存储在常量池中。 - 如果不是用双引号声明的
String
对象,可以使用String
提供的intern
方法。intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中。
代码演示
public static void main(String[] args) {// 创建了2个对象,第一个对象是”aaa”字符串存储在常量池中,第二个对象在JAVA Heap中的 String 对象String s1 = new String("aaa");String s2 = new String("aaa");System.out.println(s1 == s2); // false s1和s2指向堆中的两个不同对象// 将字符串s1放入常量池,由于常量池已经存在了"aaa",于是返回的就是常量池中的对象引用。String s3 = s1.intern();// 由于常量池中已有“aaa”,直接返回常量池中的引用String s4 = "aaa";System.out.println(s1 == s3); // false s1指向的是堆中的对象,s3指向的是常量池中的对象System.out.println(s4 == s3); // true // 在堆中创建了两个匿名对象,还有一个“aaabbb”对象,常量池中有"aaa"和“bbb”对象。String s5 = new String("aaa") + new String("bbb");// 将字符串s5放入常量池,这里直接存储的是堆中对象的引用,因为常量池中不需要再存储一份相同对象了。这个引用指向 s5 引用的对象。String s6 = s5.intern();System.out.println(s5 == s6); // true s6和s5指向的是同一个对象String s7 = "aaabbb";System.out.println(s5 == s7); // true}
String#intern
含义:如果常量池中存在当前字符串, 就会直接返回当前字符串. 如果常量池中没有此字符串, 会将此字符串放入常量池中后, 再返回。
使用String#intern
方法时,如果堆中存在对象,则会直接保存对象的引用,而不会重新创建对象。
string.intern()方法理解相关推荐
- Java--深入理解字符串的String#intern()方法奥妙之处
学习背景 进入正文学习字符串的intern()方法之前,先给下这4个问题,看下自己是否都知道答案? 1.String s1 = "a" + "b"; //创建了 ...
- String.intern()方法JDK6与JDK7/JDK8不同
在JDK6中,String.intern()方法先去运行时常量池中查看有无该字符串,如果有,则直接返回该字符串在方法区的内存地址.如果没有则会先将该字符串对象复制一份保存在常量池中,并返回该字符串对象 ...
- 谈谈String.intern方法
谈谈String.intern方法 1. 首先明确什么是intern()方法? String.intern()是一个Native方法,底层调用C++的 StringTable::intern方法实现. ...
- Nacos源码中为什么使用了String.intern方法?
前言 面试的时候经常被问到String的intern方法的调用及内存结构发生的变化.但在实际生产中真正用到过了吗,看到过别人如何使用了吗? 最近阅读Nacos的源码,还真看到代码中使用String类的 ...
- JAVA中String.intern的理解
intern() 方法返回字符串对象的规范化表示形式. 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern ...
- String.intern() 方法
字符串常量池: jdk6中字符串常量池在永久代,从jdk7开始,在堆中又划分了一块区域,放到了堆空间中. intern() 方法: 是扩充常量池的一个方法,当一个String的实例调用intern() ...
- java返回两个string_java – 为什么String.intern()方法返回两个不同的结果?
我有这样的代码: public static void main(String[] args) { String str1 = new StringBuilder("计算机").a ...
- Java基础提升篇:理解String 及 String.intern() 在实际中的应用
点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 你所需要的 ...
- Java提升篇:理解String 及 String.intern() 在实际中的应用
String的深入解析 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些 ...
最新文章
- 学习日志---哈夫曼树相关算法
- 子网掩码和网关的关系
- Unity HDRP渲染管线基础指南
- 2021年二月下旬文章导读与开源项目仓库 | scatter-gather DMA,SR-IOV,ARP欺骗,中断,Lockdep,virtio,vhost
- 移动端:判断是否微信端、判断手机操作系统(ios或android)
- 视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率
- Cookie对象常用属性
- 基于java的房屋销售管理系统设计(含源文件)
- 计算机网络性能常见计算公式
- 免费在线的数据库建模工具,云版PownerDesigner
- java调用讯飞语音合成api
- 有道智云应用ID应用密钥审请
- android 手机存储大小设置,如何让手机内存变大?内存不足解决方法【详解】
- F11一键还原精灵使用教程(详细图文步骤)
- Vue.filter过滤器存储单位换算按B、KB 、M、 G显示字节大小
- php电商订单模块设计,电商后台订单管理模块
- ubuntu更新源及添加方法
- jenkins 删除 构建历史
- C++及Qt电子书分享
- 工作十年后,我悟出了哪些职场道理?(人际交往篇
热门文章
- 利用GEE下载Landsat8影像并实现去云
- 如何使用时间序列数据去酿酒
- mysql数据库优化器_mysql数据库运维利器-一键生成MySQL数据库优化建议-【安基网】...
- 演讲培训经典句子分享
- 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...
- 垂直同步VSYNC,帧率,渲染缓存
- 恢复Win10中缺少的电源计划
- 当在Android studio中R文件报红时
- 【数据分析与挖掘】基于LightGBM,XGBoost,逻辑回归的分类预测实战:英雄联盟数据(有数据集和代码)
- 房地产行业“财报视角看地产”系列之四:房地产企业负债类科目及隐性负债深度解析-202101.PDF