我已经编写了代码,但是请告诉我String类的intern()
方法的功能,它是否尝试将池对象地址和内存地址带到同一页上?
我开发了以下代码:
public class MyClass
{
static String s1 = "I am unique!";
public static void main(String args[])
{
String s2 = "I am unique!";
String s3 = new String(s1).intern();// if intern method
is removed then there will be difference
// String s3= new String("I am unique!").intern();
System.out.println("s1 hashcode -->"+s1.hashCode());
System.out.println("s3 hashcode -->"+s3.hashCode());
System.out.println("s2 hashcode -->"+s2.hashCode());
System.out.println(s1 == s2);
System.out.println("s1.equals(s2) -->"+s1.equals(s2));
/* System.out.println("s1.equals(s3) -->"+s1.equals(s3));
System.out.println(s1 == s3);
System.out.println(s3 == s1);
System.out.println("s3-->"+s3.hashCode());*/
// System.out.println(s3.equals(s1));
}
}
现在,上述
intern()
方法的作用是什么?由于
hashCodes()
相同,请解释intern()
方法的作用。提前致谢。
最佳答案
由于operator==
会检查身份,而不是相等性,因此仅当System.out.println(s1 == s3);
和true
是完全相同的对象时,s1
(已注释掉)才会产生s3
。
方法intern()
确保发生这种情况,因为两个字符串-s1
和s3
彼此相等,因此通过分配它们的intern()
值,可以确保它们实际上是相同的对象,尽管相等但不会两个不同对象。
如javadocs所说:
因此,对于任意两个字符串s和t,s.intern()== t.intern()
当且仅当s.equals(t)为true时为true。
ps。您不必在intern()
上调用s1
,因为它是String literal-已经规范。
但是,它对s1 == s2
都没有影响,因为它们都是字符串文字,并且intern()
都不对它们都调用。
关于java - 关于intern()方法的作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10394850/