我需要帮助来确定我将提供的代码创建了多少对象。
我假设只有一个对象,因为没有使用“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);
每次调用toUcapCase()时,都会创建一个新的String对象。即使它看起来像是同一个对象,它们在内存中也是技术上不同的对象,如此代码所示
String x = "hello";
String y = x.toUpperCase();
System.out.println(x.equals(y));
//yields false
所以为了回答你的问题,我会说创造了3个对象;虽然你没有在任何地方保存第二个,但它仍然被创建然后立即被丢弃
我算十:
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个对象)