以下代码段中创建了多少个字符串对象

我需要帮助来确定我将提供的代码创建了多少对象。


我会假设只有一个对象,因为没有使用“新”运算符,但我不确定。


System.out.print("Enter a sentence : ");


mySentence = keyboard.next();


System.out.println("The original is  : " + mySentence);


mySentence.toUpperCase();


System.out.println("The same one is  : " + mySentence);


mySentence = mySentence.toUpperCase();


System.out.println("The raised is    : " + mySentence); 


FFIVE
浏览 127回答 3
3回答

一只萌萌小番薯

我数了十:第一条语句创建一个 String ("Enter a sentence :") (1)第二条语句创建一个字符串 (mySentence) (2)第三条语句创建 2 个字符串(""原来是:"" 和串联的字符串) (3,4)第四句创建一个新字符串(然后丢弃它)(5)第五个语句再创建 2 个 (6,7)第六个陈述创造了另一个(8)最后的语句再创建 2 个 (9,10)

森林海

这取决于。每次创建 String 时,也会创建一个新对象(但这也取决于String pool)。您可以通过将两个字符串与 进行比较来证明这一点==。==测试引用相等(它们是否是同一个对象),同时.equals()测试内容相等。System.out.print("Enter a sentence : ");final String mySentence = keyboard.next();System.out.println("The original is  : " + mySentence);final String mySentence2 = mySentence.toUpperCase();System.out.println("The same one is  : " + mySentence);final String mySentence3 = mySentence.toUpperCase();System.out.println("The raised is    : " + mySentence3); System.out.println(mySentence == mySentence2);System.out.println(mySentence3 == mySentence2);System.out.println(mySentence3 == mySentence);输入字符串“FOO”的输出是(创建了 1 个对象)The original is  : FOOThe same one is  : FOOThe raised is    : FOOtruetruetrue输入字符串“foo”的输出是(创建了 3 个对象)The original is  : fooThe same one is  : fooThe raised is    : FOOfalsefalsefalsetoUpperCase()调用toUpperCase(Locale.getDefault()),它仅在必要时创建一个新的 String 对象。如果输入字符串已经是大写,则返回输入字符串(参见此处)。(加上 7 个对象,如果你计算字符串println)

莫回无

每次调用 toUpperCase() 都会创建一个新的 String 对象。即使它看起来像是同一个对象,但它们在内存中技术上是不同的对象,如这段代码所示String x = "hello";String y = x.toUpperCase();System.out.println(x.equals(y));//yields false因此,要回答您的问题,我会说创建了 3 个对象;尽管您没有在任何地方保存第二个,但它仍然被创建然后立即丢弃
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java