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

将创建多少个String对象

封瑞
2023-03-14
问题内容

我有以下Java代码:

public String makinStrings() {
  String s = "Fred";
  s = s + "47";
  s = s.substring(2, 5);
  s = s.toUpperCase();
  return s.toString();
}

问题很简单:String调用此方法将创建多少个对象?

一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建,没有给出解释(这是一个SCJP问题)。

从我的角度来看,有5个对象:“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。

我也在SCJP模拟考试中找到了这个问题,答案是3。


问题答案:

“ Fred”和“ 47”将来自字符串文字池。因此,在调用该方法时 将不会
创建它们。而是在加载类时将它们放到那里(或更早,如果其他类使用具有相同值的常量)。

“ Fred47”,“ ed4”和“ ED4”是String将在每次方法调用时创建的3个对象。



 类似资料:
  • 我知道,当我们使用下面给出的字符串文本时,字符串对象是在字符串池中创建的(如果它不存在的话)。 在上述情况下,池中只会创建一个字符串对象。 但是,当我们使用new关键字时,它总是在堆内存中创建一个新的String对象(即使String池中有一个) 在这里,我有一个困惑,关于在下面的情况下将创建多少对象,以及在哪里(池或堆内存)。

  • 问题内容: 我和我的朋友正在讨论Strings,而我们坚持了这一点: 他说总共将创建三个对象,而我说将创建一个对象。 他在3个对象之后的逻辑是:一个用于“ ObjectOne”,一个用于“ ObjectTwo”,第三个是两个String对象的串联版本。 我在一个对象后面的逻辑是在编译时,两个字符串对象都将在字节码中串联为: 并且在运行时,将仅以这种方式创建一个对象。这背后的真相是什么? 问题答案:

  • 所以我不确定是0还是2。 如果有人知道请告诉我。

  • 我厌倦了下面的片段,得到了3个对象和3个引用的答案。但在回答键中说,这是4个对象和3个参考。我不知道是我错了还是回答键错了。请有人帮忙。 我的答案解释: 参考文献:str1、str2、str3。因此引用数=3。 对象:最初创建的对象计数=0。 第1行创建值为Java并引用str1的新对象。对象创建计数=1。 第2行创建值为“GFT”并引用“str2”的新对象。对象创建计数=2。 第3行创建新引用“

  • 如果我们使用 那么创建了多少对象,它们驻留在哪里?

  • 问题内容: 当涉及到String时,对于对象的情况我有点困惑,因此想知道以下代码将创建多少个对象,并针对String池和堆对String对象的创建进行了一些解释。 问题答案: 将创建4个对象。 两个注意事项: 总是创建一个新对象。字符串文字只能为所有情况创建一个对象。最佳实践是永远不要使用-实例化是多余的。 两个字符串的连接转换为,因此在此处创建了另一个对象。