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

JAVA字符串对象数

龚玄天
2023-03-14
问题内容

谁能从此链接http://www.javatpoint.com/corejava-interview-
questions-3
解释问题87和89

87)在下面的代码中将创建多少个对象?

String s1 = "string1";
String s2 = "string1";
String s3 = "string1";

答案是:只有一个物体

89)在下面的代码中将创建多少个对象?

String s = new String("Welcome");

答案是:两个对象,一个在字符串常量池中,另一个在非池(堆)中。


问题答案:

尽管String是用Java编写的类,但它是一种与JVM有特殊关系的特殊类。其中之一是字符串文字(用引号引起来的字符序列)。当JVM看到"abc"它时,它会执行以下操作:

String obj = stringLiteralsCache.get("abc");
if (obj == null) {
    obj = new String("abc");
    stringLiteralsCache.put("abc", obj);
}

因此,在您的第一个示例中,第一行导致创建新实例,但是接下来的两行仅从缓存中获取已创建的实例。

但是,缓存仅适用于文字。当您显式调用构造函数时,它不能阻止创建新实例。因此,new String("Welcome")创建2个对象:一个来自文字,Welcome因为它尚未在缓存中,第二个来自显式调用String构造函数。



 类似资料:
  • 问题内容: 之间有什么区别 和 问题答案: 当你使用字符串文字时,可以将字符串嵌入,但是当你使用时,你将获得一个新的字符串对象。 在此示例中,两个字符串文字均引用相同的对象: 在这里,创建了2个不同的对象,它们具有不同的引用: 通常,应尽可能使用字符串文字表示法。它更易于阅读,并且为编译器提供了优化代码的机会。

  • 问题内容: 出于好奇,我尝试了这个例子。 输出为“字符串”。我想知道JVM决定在什么基础上调用以String作为参数而不是Object的方法。 问题答案: 只要可以将多个重载方法应用于参数列表,就会使用最具体的方法。 在这种情况下,传递时都可以调用这两种方法,因为“空类型”既可以分配给也可以分配给。采取的方法更加具体,因此将被选择。

  • 我有Json String看起来像这样 并希望将此Json字符串转换为对象的数组列表,并将所有元素放在类(数据Object.class)上并打印元素。 输出为: 我创建的类具有这种形式 我做错了什么?

  • 本文向大家介绍将Java字符串对象转换为布尔对象,包括了将Java字符串对象转换为布尔对象的使用技巧和注意事项,需要的朋友参考一下 可以使用字符串文字在Java中创建字符串对象。 创建字符串对象的另一种方法是使用new关键字。 我们使用第一种方法来创建字符串对象。 现在,使用该方法将字符串对象转换为布尔对象。我们已经在布尔对象上使用了此方法。 现在让我们看完整的示例,以显示如何将String Ob

  • 问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s

  • 问题内容: 由于某种原因,我似乎无法在DOMWindow对象上使用JSON.stringify。例如: 在Safari和Chrome上进行了测试。有谁知道我如何实现这一目标? 编辑 : 将编辑移至新问题,因为它并非真的特定于此。 问题答案: 为什么要序列化DOM?如果需要,可以在Crescent的链接中查找。您不能序列化(字符串化)窗口对象的原因是因为它包含循环引用,并且默认情况下不支持它们。