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()方法理解相关推荐

  1. Java--深入理解字符串的String#intern()方法奥妙之处

    学习背景 进入正文学习字符串的intern()方法之前,先给下这4个问题,看下自己是否都知道答案? 1.String s1 = "a" + "b"; //创建了 ...

  2. String.intern()方法JDK6与JDK7/JDK8不同

    在JDK6中,String.intern()方法先去运行时常量池中查看有无该字符串,如果有,则直接返回该字符串在方法区的内存地址.如果没有则会先将该字符串对象复制一份保存在常量池中,并返回该字符串对象 ...

  3. 谈谈String.intern方法

    谈谈String.intern方法 1. 首先明确什么是intern()方法? String.intern()是一个Native方法,底层调用C++的 StringTable::intern方法实现. ...

  4. Nacos源码中为什么使用了String.intern方法?

    前言 面试的时候经常被问到String的intern方法的调用及内存结构发生的变化.但在实际生产中真正用到过了吗,看到过别人如何使用了吗? 最近阅读Nacos的源码,还真看到代码中使用String类的 ...

  5. JAVA中String.intern的理解

    intern() 方法返回字符串对象的规范化表示形式. 它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern ...

  6. String.intern() 方法

    字符串常量池: jdk6中字符串常量池在永久代,从jdk7开始,在堆中又划分了一块区域,放到了堆空间中. intern() 方法: 是扩充常量池的一个方法,当一个String的实例调用intern() ...

  7. java返回两个string_java – 为什么String.intern()方法返回两个不同的结果?

    我有这样的代码: public static void main(String[] args) { String str1 = new StringBuilder("计算机").a ...

  8. Java基础提升篇:理解String 及 String.intern() 在实际中的应用

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 好好学java java知识分享/学习资源免费分享 关注 精彩内容 你所需要的 ...

  9. Java提升篇:理解String 及 String.intern() 在实际中的应用

    String的深入解析 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些 ...

最新文章

  1. 学习日志---哈夫曼树相关算法
  2. 子网掩码和网关的关系
  3. Unity HDRP渲染管线基础指南
  4. 2021年二月下旬文章导读与开源项目仓库 | scatter-gather DMA,SR-IOV,ARP欺骗,中断,Lockdep,virtio,vhost
  5. 移动端:判断是否微信端、判断手机操作系统(ios或android)
  6. 视频编解码(七):profilelevel简介、ffmpeg如何控制profilelevel、编码效率
  7. Cookie对象常用属性
  8. 基于java的房屋销售管理系统设计(含源文件)
  9. 计算机网络性能常见计算公式
  10. 免费在线的数据库建模工具,云版PownerDesigner
  11. java调用讯飞语音合成api
  12. 有道智云应用ID应用密钥审请
  13. android 手机存储大小设置,如何让手机内存变大?内存不足解决方法【详解】
  14. F11一键还原精灵使用教程(详细图文步骤)
  15. Vue.filter过滤器存储单位换算按B、KB 、M、 G显示字节大小
  16. php电商订单模块设计,电商后台订单管理模块
  17. ubuntu更新源及添加方法
  18. jenkins 删除 构建历史
  19. C++及Qt电子书分享
  20. 工作十年后,我悟出了哪些职场道理?(人际交往篇

热门文章

  1. 利用GEE下载Landsat8影像并实现去云
  2. 如何使用时间序列数据去酿酒
  3. mysql数据库优化器_mysql数据库运维利器-一键生成MySQL数据库优化建议-【安基网】...
  4. 演讲培训经典句子分享
  5. 《自然语言处理实战入门》 ---- 第4课 :中文分词原理及相关组件简介 之 汉语分词领域主要分词算法、组件、服务(上)...
  6. 垂直同步VSYNC,帧率,渲染缓存
  7. 恢复Win10中缺少的电源计划
  8. 当在Android studio中R文件报红时
  9. 【数据分析与挖掘】基于LightGBM,XGBoost,逻辑回归的分类预测实战:英雄联盟数据(有数据集和代码)
  10. 房地产行业“财报视角看地产”系列之四:房地产企业负债类科目及隐性负债深度解析-202101.PDF