String intern() 字符串常量池

个人博客

String s1 = new String("abc");这句话创建了几个字符串对象?

会创建 1 或 2 个字符串对象。

1、如果字符串常量池中不存在字符串对象“abc”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。

2、如果字符串常量池中已存在字符串对象“abc”的引用,则只会在堆中创建 1 个字符串对象“abc”。

String#intern 方法有什么作用?

String.intern() 是一个 native(本地)方法,其作用是将指定的字符串对象的引用保存在字符串常量池中,可以简单分为两种情况:

  • 如果字符串常量池中保存了对应的字符串对象的引用,就直接返回该引用。
  • 如果字符串常量池中没有保存了对应的字符串对象的引用,那就在常量池中创建一个指向该字符串对象的引用并返回。
String s1 = new String("ab");
String s2 = s1.intern();
String s3 = "ab";

System.out.println(s1 == s2); // false,因为s1是堆中的对象,s2是字符串常量池中的对象
System.out.println(s2 == s3); // true,因为s2和s3都引用字符串常量池中的同一个对象

虽然intern()方法可以帮助节省内存,但不应该滥用它,因为它需要维护一个常量池,如果过多的字符串被 intern,可能会导致常量池变得庞大,从而浪费内存。
在一些情况下,使用intern()可能会导致性能下降,因此在使用之前应该慎重考虑。
总之,String.intern() 方法是用于在字符串常量池中管理字符串对象的引用,以实现字符串重用和内存优化的方法。在某些情况下,它可以在内存敏感的应用程序中提供性能和内存优势。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值