Java String intern()
时间:2020-02-23 14:34:32 来源:igfitidea点击:
Java String intern()是本机方法。
当在String对象上调用intern()方法时,如果字符串池已经具有具有相同值的字符串,则将返回池中对String的引用。
否则,此字符串对象将添加到池中,并返回引用。
Java String intern()
让我们尝试通过一个简单的程序来了解intern()方法。
package com.theitroad.string; public class StringIntern { public static void main(String args[]) { String s1 = new String("abc"); //goes to Heap Memory, like other objects String s2 = "abc"; //goes to String Pool String s3 = "abc"; //again, goes to String Pool //Let's check out above theories by checking references System.out.println("s1==s2? " + (s1 == s2)); //should be false System.out.println("s2==s3? " + (s2 == s3)); //should be true //Let's call intern() method on s1 now s1 = s1.intern(); //this should return the String with same value, BUT from String Pool //Let's run the test again System.out.println("s1==s2? " + (s1 == s2)); //should be true now } }
输出:
s1==s2? false s2==s3? true s1==s2? true
字符串intern()示例说明
当我们使用new运算符时,在堆空间中创建String。
因此,将在堆内存中创建值为" abc"的" s1"对象。当我们创建字符串文字时,它是在字符串池中创建的。
因此," s2"和" s3"是指池中具有值" abc"的字符串对象。在第一个打印语句中,s1和s2引用不同的对象。
因此,s1 == s2返回" false"。在第二个打印语句中,s2和s3引用池中的同一对象。
因此,s2 == s3返回" true"。现在,当我们调用
s1.intern()
时,JVM会检查池中是否存在值为" abc"的字符串?由于池中有一个字符串对象,其值为" abc",因此将返回其引用。注意,我们正在调用
s1 = s1.intern()
,因此s1现在引用的值为值" abc"的字符串池对象。此时,所有三个字符串对象都引用字符串池中的同一对象。
因此s1 == s2现在返回" true"。