Java String intern()方法

培训教学 潘老师 8个月前 (09-07) 179 ℃ (0) 扫码查看

Java 中的String.intern ()返回字符串池中存在的相等字符串文字的引用。如果字符串池中存在现有字符串文字,则返回其引用。否则,创建一个具有相同内容的新字符串,并返回新字符串的引用。

请注意,在内部,字符串相等性是使用String.equals()方法检查的。

1.什么是字符串常量池?

字符串常量池是堆内存中的保留内存区域,Java 用于存储字符串常量。请注意,Java 字符串默认是不可变的。

Java 在字符串池中存储每个不同字符串值的且仅一份副本。它有助于在程序执行期间重用字符串以节省内存。正在运行的程序中可能会有很多对某个字符串的引用,但字符串池中只会有一份字符串的副本。

2. 字符串文字和对象

在Java中,我们可以通过两种方式创建字符串。第一种方法是创建字符串文字,第二种方法是使用new关键字创建 String 对象。

String str1 = "hello world";  //String 字面量

String str2 = new String("hello world");  //String 对象
  • 当我们使用文字创建字符串时(也是推荐的),字符串文字总是直接创建到字符串池中。
  • 当我们使用new关键字创建字符串时,该字符串将在普通堆内存中创建。

3. String.intern()方法

String.intern ()是一个本机方法,它返回对字符串池中存在的相等字符串文字的引用。请注意,所有字符串文字都会在字符串池中自动创建,因此intern()方法对于使用new关键字创建的String对象很有用。

下面的程序中,name变量包含了对堆中String对象的引用。当我们调用intern()时,会在字符串池中创建一个内容为“Alex”的新字符串文字。变量str包含对池中创建的字符串文字的引用。

String strObject = new String("Alex");
String strLiteral = strObject.intern();

Assertions.assertFalse(strObject == strLiteral);   //指向不同的对象

Assertions.assertTrue(strObject.equals(strLiteral));  //相同内容值

任何使用相同内容创建的新字符串文字都将指向字符串池中的对象。

String newLiteral = "Alex";

Assertions.assertTrue(strLiteral == newLiteral);

通常,任何两个字符串 s1 和 s2,s1.intern() == s2.intern()当且仅当s1.equals(s2)为true时才为true。

4.结论

在本 Java 教程中,我们学习了如何实习字符串,以及字符串文字与字符串对象有何不同。String.intern ()是本机实现的方法,提供非常高的性能。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/8893.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】