当前位置: 首页 > 知识库问答 >
问题:

请解释intern()方法的功能[重复]

林修雅
2023-03-14
System.out.println(new String("ABC").intern()==new String("ABC").intern());

根据我,3个新的对象将创建。一个转到字符串池,两个匿名对象将由new运算符创建。但我不确定。

如果我错了,请解释。

共有1个答案

督弘化
2023-03-14

假设优化器中没有任何聪明之处,将创建两个对象。(一个足够聪明的优化器可以将其优化为无条件的true,在这种情况下不创建对象。)

TL;DR版本:您的答案3几乎是正确的,只是进入字符串池的字符串不是作为该语句的一部分生成的;已经创建了。

首先,让我们去掉“abc”文本。它在运行时中表示为string对象,但它存在于pergen中,并且在JVM的整个生命周期中只创建一次。如果这是第一个使用该字符串文本的类,那么它是在类加载时创建的(请参见JLS12.5,它声明在类加载时创建字符串,除非它以前存在)。

String a = new String("ABC"); // a != "ABC"
String aInterned = a.intern(); // aInterned == "ABC"

String b = new String("ABC"); // b != "ABC"
String bInterned = b.intern(); // bInterned == "ABC"

System.out.println(new String("ABC").intern()==new String("ABC").intern());
                                            // ... is equivalent to... 
System.out.println(aInterned == bInterned); // ...which is equivalent to...
System.out.println("ABC" == "ABC");         // ...which is always true.
 类似资料:
  • 问题内容: 我正在寻找有关通过python中的spark可用的聚合功能的更好解释。 我的示例如下(使用来自Spark 1.2.0版本的pyspark) 输出: 我得到的预期结果是和4个元素的总和。如果我将传递给聚合函数的初始值更改为from, 则会得到以下结果 输出: 该值增加9。如果将其更改为,则该值为,依此类推。 有人可以向我解释该值是如何计算的吗?我希望该值增加1而不是9,希望看到相反的值。

  • 问题内容: 我有一个事件表,其中包含以下字段: 给定一个持续时间和一个数字,我需要在持续时间的任何相对时间窗口中,对所有大于事件的事件进行计数。这基本上需要针对每个事件的滑动窗口。例如,我希望所有event_type在10分钟的持续时间内具有超过5个事件的活动。 我不确定如何在没有窗口功能的情况下解决此问题。 (我使用的是mysql 5.6。我在说的是一百万行以下的数据集。) 问题答案: MySQ

  • 本文向大家介绍Java String intern()方法示例。,包括了Java String intern()方法示例。的使用技巧和注意事项,需要的朋友参考一下 String类的 intern()方法返回字符串对象的规范表示。因此,对于任意两个字符串s和t,当且仅当s.equals(t)为true时,s.intern()== t.intern()为true。 示例 输出结果

  • 问题内容: 请解释以下代码的输出: 如果我致电,输出为: 如果我致电,输出为: 为什么会有这种不一致?请解释。 问题答案: 该方法启动一个新线程,该线程的入口点就是方法。如果直接调用run(),它将在同一线程中执行。假设调用将启动一个新的执行线程,则该方法可在其余主方法执行之后(如您的示例)被调用。 将您的main方法更改为调用并重复运行,您会发现有时它会输出: 有时它输出: 取决于Java选择如

  • Applet类中init()方法功能:初始化装载窗体的控件init()方法:当Applet程序启动时自动调用init()方法。init()方法仅用来做初始化操作。用户程序可以重载父类的init()方法,通过init()方法初始化图像文件、声音文件、字体或者其它一些对象等。