当前位置: 首页 > 面试题库 >

字符串intern()行为

胡鸿禧
2023-03-14
问题内容

从String类的javaDocs的intern方法中:

调用intern方法时,如果池已经包含等于equals(Object)方法确定的此String对象的字符串,则返回池中的字符串。否则,将此String对象添加到池中,并返回对此String对象的引用。

考虑以下用例:

    String first = "Hello";
    String second = "Hello";

    System.out.println(first == second);

    String third = new String("Hello");
    String fourth = new String("Hello");

    System.out.println(third == fourth);

    System.out.println(third == fourth.intern());
    System.out.println(third.intern() == fourth);
    System.out.println(third == fourth);

    System.out.println(third.intern() == fourth.intern());
    System.out.println(third.intern() == first);

    String fifth = new String(new char[]{'H','e','l', 'l', 'o'});
    String sixth = new String(new char[]{'H','e','l', 'l', 'o'});

    System.out.println(fifth == fifth.intern());
    System.out.println(sixth == sixth.intern());

    String seven = new String(new char[]{'H','e','l', 'l', 'o' , '2'});
    String eight = new String(new char[]{'H','e','l', 'l', 'o' , '2'});

    System.out.println(seven == seven.intern());
    System.out.println(eight == eight.intern());

有人可以解释为什么 seven == seven.intern()正确的, 而以下是 错误的

  • System.out.println(fifth == fifth.intern());
  • System.out.println(sixth == sixth.intern());
  • System.out.println(eight == eight.intern());

问题答案:

七是您第一次使用字符串’hello2’。因此,intern将字符串插入池中(并返回它)。因为它等于您的七个。

当您使用8时,该字符串已经在池中(通过运行seven.intern()之前的代码,因此在执行操作时,eight == eight.intern()您将在方程式的左侧获得新创建的eight字符串,而在右侧则是由7从池中创建的字符串) ,这是不一样的



 类似资料:
  • 我做了一些调查,以了解字符串是如何工作的。intern()方法是用java实现的。 我在Open JDK 6中查看了Intern pool的C实现,在那里我看到了一个简单的哈希集。对我来说,这意味着当有人试图实习一个字符串时,接下来的步骤应该完成: 查找与给定字符串关联的哈希代码 很多人都这么说str1。intern()=str2。intern()将比str1快。等于(str2)。 但我不明白为什

  • 问题内容: 我看到很多这样的旧代码: 我看不到使用intern()的任何原因,因为在Javadoc中可以看到:“所有文字字符串和字符串值常量表达式都被插入。” 是否有此意图,也许是在该语言的过去版本中? 问题答案: 这是一种确保实际上不是常数的技术。 当Java编译器看到对最终静态基元或String的引用时,它将该常量的实际值插入使用它的类中。如果您随后在定义类中更改常量值,但不重新编译using

  • 本文向大家介绍浅析Python中字符串的intern机制,包括了浅析Python中字符串的intern机制的使用技巧和注意事项,需要的朋友参考一下 intern机制:   字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化,例如:Python解释器中使用了 intern(字符串驻留)的技术来提高字符串效率,什么是intern机制?即

  • 字符串s2=s1。concat(“ABC”);将在堆区域上创建一个新的字符串对象“ABCABC”。字符串s3=s2。实习生();应在字符串常量池上创建新的字符串对象。 由于这是两个不同的对象,它们的引用不应该相等。但似乎我错过了一些与intern()相关的重要内容。

  • 我的问题很简单。有什么区别-

  • 问题内容: 这是该问题的后续措施。 问题在下面的第二行。 问题答案: 具体根据 源,其使用,