【面试题精讲】你了解String.intern方法吗
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
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方法吗的更多相关文章
- 常量池之String.intern()方法
JDK7将String常量池从Perm区移动到了Java Heap区.在JDK1.6中,intern方法会把首次遇到的字符串实例复制到永久代中,返回的也是永久代中的实例.但是在JDK1.7以后,Str ...
- String放入运行时常量池的时机与String.intern()方法解惑
运行时常量池概述 Java运行时常量池中主要存放两大类常量:字面量和符号引用.字面量比较接近于Java语言层面的常量概念,如文本字符串.声明为final的常量值等. 而符号引用则属于编译原理方面的概念 ...
- 浅析String.intern()方法
1.String类型“==”比较样例代码如下:package com.luna.test;public class StringTest { public static void main(Strin ...
- String intern 方法 jdk中的描述
一个初始为空的字符串池,它由类 String 私有地维护. 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中 ...
- 对String Intern()方法的理解
今天重新看了一点周志明大佬的<深入理解Java虚拟机>,发现这个地方讲的不是很透彻,在网络上看到一些博客基本也都是在搬运原文,搞得一头雾水.弄了半天算是彻底明白了,做一下笔记. 搬运一下原 ...
- String.intern() 方法__jdk1.6与jdk1.7/jdk1.8的不同
1.为什么要使用intern()方法 intern方法设计的初衷是为了重用string对象,节省内存 用代码实例验证下 public class StringInternTest { static f ...
- 字符串常量池和String.intern()方法在jdk1.6、1.7、1.8中的变化
字符串常量池也是运行时常量池 jdk1.6中,它是在方法区中,属于“永久代” jdk1.7中,它被移除方法区,放在java堆中 jdk1.8中,取消了“永久代”,将常量池放在元空间,与堆独立了 pub ...
- String intern()方法详解
执行以下代码 String a1=new String("abc"); String a2=new String("abc"); Sys ...
- 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法
在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...
- 深入理解String.intern()方法
首先进入intern()的源码中, 首先说一点:1.7后的JVM为String在方法区中开辟了一个字符串常量池,如果一个String()不是new()出来的,都将在常量池中拿字符. 注释翻译过来就是, ...
随机推荐
- 【笔记】Ribbon负载均衡伪随机算法
伪随机:思路 当一个下标(伪服务)连接被调用两次,第三次如果还是它,就让再随机一次 当重复随机到一台服务两次时判断第三次是否还是它 是的话 我们要进行 再次随机 也就是第三次 package top. ...
- 在macOS中搭建.NET MAUI开发环境
@ 目录 准备 安装扩展 安装 .NET 安装工作负载 安装 Xcode 命令行工具 调试安卓应用 安装 JDK 安装 Android SDK 安装 Android 模拟器 安装模拟器 安装镜像 创建 ...
- 用c++写 爱心图案
绘制爱心曲线 现代数学的一个有趣的证明是 Georg Cantor 证明了有理数是可枚举的.在这篇博客中,我们将通过编程绘制一个简单而美丽的数学图形:爱心曲线. 爱心曲线代码 //爱心曲线 (x^2 ...
- const 方法可以改变(智能)指针成员指向的对象
<C++ Primer 5th> P406 const 方法,不能修改指针本身,但是可以修改指针指向的对象! class Foo { public: Foo() : c(new int() ...
- nacos系列:spring cloud使用nacos实现配置管理和服务发现
目录 版本说明 创建项目 版本说明 IDEA:2021.3 Maven:3.6.3 Jdk:17 Spring-Boot:2.6.13 Spring-Cloud:2021.0.5 Spring-Clo ...
- 谁说AI看不懂视频?
摘要:人工智能在视觉领域发展趋于成熟,基于人工智能的视频内容分析能从根本上解决传统内容分析方法性能低下的问题,视频分析开启2.0智能时代. 视频数据量激增,数据处理和内容运营成本居高不下 云计算.大数 ...
- nodejs升级到最新LTS版本方法汇总:linux/mac/window—npm/yum/ssh
nodejs不同版本的差异还是蛮多的,比如obj?.a 在nodejs12是不支持的,必须得升级到14才可以.但是centos yum 默认安装的,或者系统集成的nodejs版本都是很老的.项目上传到 ...
- mac下python3.7安装mysqlclient出错解决
错误信息 Building wheel for mysqlclient (setup.py) ... error ERROR: Command errored out with exit status ...
- python 内置命名空间、标准库、模块相关概念
内置命名空间 python 解释器启动后就可以直接使用一些函数,常量,类型,异常等.保存这些数据的空间统称内置命名空间. 内置命名空间中包含的数据如下: 对于内置命名空间中最常用的就是内置函数. 内置 ...
- xv6book阅读 chapter1
xv6book主要研究了xv6如何实现它的类Unix接口,但是其思想和概念不仅仅适用于Unix.任何操作系统都必须将进程多路复用到底层硬件上,相互隔离进程,并提供受控制的进程间通信机制. 1 了解xv ...