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

问题描述 投票:0回答:3

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

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

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); 
java string
3个回答
0
投票

每次调用toUcapCase()时,都会创建一个新的String对象。即使它看起来像是同一个对象,它们在内存中也是技术上不同的对象,如此代码所示

String x = "hello";
String y = x.toUpperCase();
System.out.println(x.equals(y));
//yields false

所以为了回答你的问题,我会说创造了3个对象;虽然你没有在任何地方保存第二个,但它仍然被创建然后立即被丢弃


0
投票

我算十:

  1. 第一个语句创建一个String(“输入一个句子:”)(1)
  2. 第二个语句创建一个String(mySentence)(2)
  3. 第三个语句创建2个字符串(“”原始是:“”和连接字符串)(3,4)
  4. 第四句创建一个新字符串(然后将其丢弃)(5)
  5. 第五个陈述创造了2个(6,7)
  6. 第六个陈述再创造一个(8)
  7. 最后的陈述创造了2个(9,10)

0
投票

Tldr:这取决于。

每次创建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  : FOO
The same one is  : FOO
The raised is    : FOO
true
true
true

输入字符串“foo”的输出是(创建了3个对象)

The original is  : foo
The same one is  : foo
The raised is    : FOO
false
false
false

toUpperCase()调用toUpperCase(Locale.getDefault()),它只在必须时创建一个新的String对象。如果输入String已经是大写,则返回输入String(see here)。

(如果计算println中的字符串,则加上7个对象)

© www.soinside.com 2019 - 2024. All rights reserved.