我需要帮助确定我将提供的代码创建了多少个对象。
我会假设只有一个对象,因为没有使用“ 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);
答案 0 :(得分:0)
每次调用toUpperCase()都会创建一个新的String对象。即使看起来像是同一对象,但从技术上讲,它们是内存中的不同对象,如此代码所示
String x = "hello";
String y = x.toUpperCase();
System.out.println(x.equals(y));
//yields false
因此,要回答您的问题,我想说创建了3个对象。尽管您没有将第二个保存在任何地方,但仍会创建它,然后立即将其丢弃
答案 1 :(得分:0)
Tldr:取决于。
每次创建字符串时,也会创建一个新对象(但这也取决于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对象。如果输入字符串已经是大写字母,则返回输入字符串(see here)。
(如果您计算println
中的字符串,则还有7个对象)
答案 2 :(得分:0)
我数十: