我已经编写了代码,但是请告诉我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()确保发生这种情况,因为两个字符串-s1s3彼此相等,因此通过分配它们的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/

10-12 05:52