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

将在字符串池中创建多少对象?

许承悦
2023-03-14

在下面的Java代码中将创建多少对象:

String s = "abc";
s = "";
String s2 = new String("mno");
s2 = "pqr";

共有1个答案

缪修德
2023-03-14
  1. 字符串s=“abc”;→一个对象,它进入字符串池,因为使用的是文字“abc”;
  2. s=“”;→一个空字符串()对象,并再次分配到字符串池中;
  3. String s2=新字符串(“mno”);→另一个使用显式new关键字创建的对象,请注意,它实际上还涉及另一个文字对象(再次在字符串池中创建)-“mno”;总的来说,这里有两个对象;
  4. s2=“pqr”;→另一个对象,正在存储到字符串池中。

这样,总共有5个对象;4个在字符串池(也称为“实习生池”)中,一个在普通堆中。

请记住,每当您使用“string literal”,JVM首先检查字符串池中是否存在相同的字符串对象(根据string::equals..()),然后执行以下操作之一:

    null
 类似资料:
  • 将在字符串常量池和堆中为以下代码创建多少个对象: 据我所知,所有的文本都是在字符串常量池中创建的,但是字符串concat操作符在内部使用StringBuffer来追加字符串,那么堆中也会创建一个对象吗?

  • 问题内容: 说我有这个表情 我知道,串池“允许运行时以节省内存在一个池保留不变的字符串” 字符串池 字符串池中将创建多少个字符串? 我最初的猜测是5 -,,,,,因为操作顺序的级联(左到右?),或者是它只是最后的结果,“TomBradyGoat”,存储在字符串池? 问题答案: 在运行时,这段代码将转换为单个对象。编译器将在编译时进行串联,并在常量池中添加一个值。

  • 当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是

  • 问题内容: 我在Ruby中有以下代码。我想将此代码转换为JavaScript。JS中的等效代码是什么? 问题答案: 更新: ECMAScript 6(ES6)引入了一种新型的文字,即 模板文字 。它们具有许多功能,其中包括变量插值,但对于这个问题最重要的是,它们可以是多行的。 模板文字由 反引号 分隔: (注意:我不主张在字符串中使用HTML) 浏览器支持还可以,但是您可以使用编译器来更好地兼容。

  • 问题内容: 我有以下Java代码: 问题很简单:调用此方法将创建多少个对象? 一开始我回答说创建了5个String对象,但是我的书回答说只有3个对象被创建,没有给出解释(这是一个SCJP问题)。 从我的角度来看,有5个对象:“ Fred”,“ 47”,“ Fred47”,“ ed4”,“ ED4”。 我也在SCJP模拟考试中找到了这个问题,答案是3。 问题答案: “ Fred”和“ 47”将来自字

  • 问题内容: 我的朋友给我发了一个问题,他在一次关于字符串对象的Java认证模拟考试中看到了一个问题: 调用此方法时将创建多少个字符串对象?考试给出的正确答案是3。但是我认为是5。 “嗨” “ 5” “ HI5” “H” “H” 我错了吗? 问题答案: String makeStrings() { String s = “HI”; //String literal s = s + “5”; //co