3 回答
TA贡献1795条经验 获得超7个赞
我数了十:
第一条语句创建一个 String ("Enter a sentence :") (1)
第二条语句创建一个字符串 (mySentence) (2)
第三条语句创建 2 个字符串(""原来是:"" 和串联的字符串) (3,4)
第四句创建一个新字符串(然后丢弃它)(5)
第五个语句再创建 2 个 (6,7)
第六个陈述创造了另一个(8)
最后的语句再创建 2 个 (9,10)
TA贡献2011条经验 获得超2个赞
这取决于。
每次创建 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 对象。如果输入字符串已经是大写,则返回输入字符串(参见此处)。
(加上 7 个对象,如果你计算字符串println)
TA贡献1865条经验 获得超7个赞
每次调用 toUpperCase() 都会创建一个新的 String 对象。即使它看起来像是同一个对象,但它们在内存中技术上是不同的对象,如这段代码所示
String x = "hello";
String y = x.toUpperCase();
System.out.println(x.equals(y));
//yields false
因此,要回答您的问题,我会说创建了 3 个对象;尽管您没有在任何地方保存第二个,但它仍然被创建然后立即丢弃
添加回答
举报