Java中String类的intern()方法揭秘

本文探讨了Java中String类的intern()方法在不同版本(JDK 1.6及以前与JDK 1.7及以后)中的行为差异。重点介绍了方法如何处理字符串常量池的加入,并解释了其对内存分配的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着java版本的不断推出,不同版本之间也会有细微差别,在这里讨论讨论String类的intern()方法!

jdk1.6之前(包括1.6):

java运行中常量池是在方法区,而通过new方法得来的对象都保存在堆里面,当某个字符串对象调用intern()方法时,如果常量池中已存在该字符串,则该操作没起到任何作用,如果常量池中不存在该字符串,则会把该字符串加入常量池中(该加入操作是通过复制原字符串来实现的),方法返回的也是复制后的实例引用,所以此时常量池中复制的字符串的地址与堆中被复制的字符串的地址不等。

jdk1.7之后:

java运行中常量池是在堆中,通过new方法得来的对象也保存在堆里面,当某个字符串对象调用intern()方法时,如果常量池中已存在该字符串,则该操作没起到任何作用,如果常量池中不存在该字符串,则会把该字符串加入常量池中(该加入操作是通过记录首次出现的实例引用),方法返回的是首次出现的实例引用,所以当某个字符串第一次出现,且调用intern()方法时,则该字符串的地址与常量池中的地址相等。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值