有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

首发博客地址

系列文章地址


String.intern 方法是 Java 中的一个方法,它用于将字符串对象添加到字符串常量池中,并返回常量池中该字符串的引用。如果常量池中已经存在该字符串,则直接返回常量池中的引用

在 Java 中,字符串常量池是一块特殊的内存区域,用于存储字符串常量。当我们使用字面量创建字符串对象时,如果字符串常量池中已经存在相同内容的字符串,则直接返回常量池中的引用

将字符串对象添
,而不会创建新的字符串对象。这样可以节省内存空间

,并提高字符串比较的效率

使用 String.intern 方法可以手动如果字符串常量池中已经存在相同内容的字符串,则直接返回常量池中的引用将字符串对象添加到字符串常量池中。如果字符串常量池中已经存在相同内容的字符串,则返回常量池中的引用;如果字符串常量池中不存在相同内容的字符串,则将该字符串添加到常量池中,并返回常量池中的引用。

下面是一个示例代码,演示了 String.intern 方法的使用:

String str1 = new String("hello");
String str2 = "hello";
String str3 = str1.intern(); System.out.println(str1 == str2); // false
System.out.println(str2 == str3); // true

在上面的代码中,str1 是通过 new 关键字创建的字符串对象,它在堆内存中分配空间。str2 是使用字面量创建的字符串对象,它在字符串常量池中分配空间。str3 是通过 String.intern 方法将 str1 添加到字符串常量池中得到的引用。

通过比较引用可以看出,str1 和 str2 的引用不相同,因为它们分别指向堆内存和字符串常量池中的不同对象。而 str2 和 str3 的引用相同,因为它们都指向字符串常量池中的同一个对象。

需要注意的是,由于字符串常量池是在运行时创建的,因此在使用 String.intern 方法时需要谨慎使用,以避免过多的字符串对象被添加到常量池中,导致内存占用过大。

如果您喜欢我的内容,就点击关注吧

扫码长按关注交流群获取最新消息,免费的面试题手册即将在交流群内推出

公众号

个人微信

本文由mdnice多平台发布

【面试题精讲】你了解String.intern方法吗的更多相关文章

  1. 常量池之String.intern()方法

    JDK7将String常量池从Perm区移动到了Java Heap区.在JDK1.6中,intern方法会把首次遇到的字符串实例复制到永久代中,返回的也是永久代中的实例.但是在JDK1.7以后,Str ...

  2. String放入运行时常量池的时机与String.intern()方法解惑

    运行时常量池概述 Java运行时常量池中主要存放两大类常量:字面量和符号引用.字面量比较接近于Java语言层面的常量概念,如文本字符串.声明为final的常量值等. 而符号引用则属于编译原理方面的概念 ...

  3. 浅析String.intern()方法

    1.String类型“==”比较样例代码如下:package com.luna.test;public class StringTest { public static void main(Strin ...

  4. String intern 方法 jdk中的描述

    一个初始为空的字符串池,它由类 String 私有地维护. 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中 ...

  5. 对String Intern()方法的理解

    今天重新看了一点周志明大佬的<深入理解Java虚拟机>,发现这个地方讲的不是很透彻,在网络上看到一些博客基本也都是在搬运原文,搞得一头雾水.弄了半天算是彻底明白了,做一下笔记. 搬运一下原 ...

  6. String.intern() 方法__jdk1.6与jdk1.7/jdk1.8的不同

    1.为什么要使用intern()方法 intern方法设计的初衷是为了重用string对象,节省内存 用代码实例验证下 public class StringInternTest { static f ...

  7. 字符串常量池和String.intern()方法在jdk1.6、1.7、1.8中的变化

    字符串常量池也是运行时常量池 jdk1.6中,它是在方法区中,属于“永久代” jdk1.7中,它被移除方法区,放在java堆中 jdk1.8中,取消了“永久代”,将常量池放在元空间,与堆独立了 pub ...

  8. String intern()方法详解

    执行以下代码 String a1=new String("abc");       String a2=new String("abc");       Sys ...

  9. 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法

    在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...

  10. 深入理解String.intern()方法

    首先进入intern()的源码中, 首先说一点:1.7后的JVM为String在方法区中开辟了一个字符串常量池,如果一个String()不是new()出来的,都将在常量池中拿字符. 注释翻译过来就是, ...

随机推荐

  1. CF1340F Nastya and CBS 题解

    题目大意 给定一个长度为 \(n(n \le 10 ^ 5)\) 的括号序列.要求支持两个操作: 修改某个位置的括号. 询问 \([l, r]\) 区间内的括号序列是否合法. 题目分析 显然,这道题是 ...

  2. 对比Spring Boot中的JdbcClient与JdbcTemplate

    本文我们一起看看Spring Boot中 JdbcClient 和 JdbcTemplate 之间的差异. 以下内容使用的Java和Spring Boot版本为: Java 21 Spring Boo ...

  3. STM32CubeMX教程14 ADC - 多通道DMA转换

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) ST-LINK/V2驱动 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK ...

  4. 听6位专家畅谈AI大模型落地实践:场景和人才是关键

    本文分享自华为云社区<听6位专家畅谈AI大模型落地实践:场景和人才是关键>,作者:华为云社区精选. 随着人工智能技术的不断突破,越来越多的行业开始应用AI技术来提高效率.降低成本.改善用户 ...

  5. 共筑数字化未来,金山办公携手华为云完成文档中心和GaussDB适配

    摘要:金山办公携手华为云完成金山办公自主研发的"WPS文档中心系统"与华为云GaussDB相互兼容性测试认证,并获得华为云授予的<技术认证书>. 本文分享自华为云社区& ...

  6. makefile:带你了解一种常用于GNU gcc编译的工具语言

    摘要:该文章主要介绍makefile,一种常用语GNU gcc编译的工具语言,同时LiteOS也是利用该文件对工程项目进行make构建生成执行文件的. LiteOS源码中使用makefile进行文件的 ...

  7. DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

    摘要:介绍在SaaS场景下如何技术选型,SaaS架构设计中关键的技术点等内容. 本文分享自华为云社区<DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计>,作者: 华 ...

  8. MRS +Apache Zeppelin,让数据分析更便捷

    摘要:选择轻量化.免运维.低成本的大数据云服务是业界趋势,如果搭建Zeppelin再同步自建一套Hadoop生态成本太高!因此我们通过结合华为云MRS服务构建数据中台. 本文分享自华为云社区<M ...

  9. 应用开发专家一席谈:开发低代码,上手低门槛,AppCube使能Citizen Developer,人人都是开发者

    摘要:让不确定因子变为确定性因子,把复杂留给平台,简单留给开发者,是软件开发效率改进一直努力的方向,也是低代码理念的来源. 本文分享自华为云社区<应用开发专家一席谈:开发低代码,上手低门槛,Ap ...

  10. ElasticSearch 实现分词全文检索 - filter查询

    目录 ElasticSearch 实现分词全文检索 - 概述 ElasticSearch 实现分词全文检索 - ES.Kibana.IK安装 ElasticSearch 实现分词全文检索 - Rest ...