3 回答
TA貢獻(xiàn)1795條經(jīng)驗 獲得超7個贊
我數(shù)了十:
第一條語句創(chuàng)建一個 String ("Enter a sentence :") (1)
第二條語句創(chuàng)建一個字符串 (mySentence) (2)
第三條語句創(chuàng)建 2 個字符串(""原來是:"" 和串聯(lián)的字符串) (3,4)
第四句創(chuàng)建一個新字符串(然后丟棄它)(5)
第五個語句再創(chuàng)建 2 個 (6,7)
第六個陳述創(chuàng)造了另一個(8)
最后的語句再創(chuàng)建 2 個 (9,10)
TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊
這取決于。
每次創(chuàng)建 String 時,也會創(chuàng)建一個新對象(但這也取決于String pool)。您可以通過將兩個字符串與 進(jìn)行比較來證明這一點(diǎn)==。==測試引用相等(它們是否是同一個對象),同時.equals()測試內(nèi)容相等。
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”的輸出是(創(chuàng)建了 1 個對象)
The original is : FOO
The same one is : FOO
The raised is : FOO
true
true
true
輸入字符串“foo”的輸出是(創(chuàng)建了 3 個對象)
The original is : foo
The same one is : foo
The raised is : FOO
false
false
false
toUpperCase()調(diào)用toUpperCase(Locale.getDefault()),它僅在必要時創(chuàng)建一個新的 String 對象。如果輸入字符串已經(jīng)是大寫,則返回輸入字符串(參見此處)。
(加上 7 個對象,如果你計算字符串println)
TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊
每次調(diào)用 toUpperCase() 都會創(chuàng)建一個新的 String 對象。即使它看起來像是同一個對象,但它們在內(nèi)存中技術(shù)上是不同的對象,如這段代碼所示
String x = "hello";
String y = x.toUpperCase();
System.out.println(x.equals(y));
//yields false
因此,要回答您的問題,我會說創(chuàng)建了 3 個對象;盡管您沒有在任何地方保存第二個,但它仍然被創(chuàng)建然后立即丟棄
添加回答
舉報
