2017-10-12 188 views
0

第6行和第8行有什麼區別?它們都打印相同的字符串。爲什麼我們需要使用toString和StringBuilder。爲什麼我們需要在stringbuilder中使用toString方法

 StringBuilder s = new StringBuilder("hello");//line1 
    System.out.println(s);//line2 
    s.append("hi");//line3 
    System.out.println(s); 
    s.append("okk"); 
    System.out.println(s);//line 6 
    s.toString(); 
    System.out.println(s);//line 8 
+2

最後一行是無用的,你應該把它賦值給一個字符串。所以基本上第6行和第8行完全一樣。如果你想測試你的理論,做System.out.println(s.ToString())。 這就是說,在這兩種情況下,println函數都是爲你做的,所以基本上,println在幕後採用字符串構建器的值,它是一個字符串並打印出來。 –

回答

4

沒有什麼線6和線路之間不同8.

PrintStream.println(Object)呼叫string.valueOf(Object)該調用對象的方法toString()的,並且被打印。

System.out.println(s)System.out.println(s.toString())具有相同的輸出(除非snull,在這種情況下,後者拋出異常)。

你打電話s.toString()的直接原因是爲了獲得當前的「建」從StringBuilder的作爲string值,這樣你就可以將它傳遞給一個希望將string其他代碼。如果您要撥打的電話號碼爲StringBuilder,則只需通過s即可,但被調用的電話號碼可以修改您的值(因爲它是不可變的數據類型,所以不能用string)。

0

System.out.println可以打印出字符數組(第6行) s.toString()用於實際將字符串構建器內容放入字符串中。在你的代碼中,你沒有將它設置爲一個字符串變量,所以什麼都不會發生......所以在line8上,字符串數組再次從字符串生成器的內容中打印出來。

if you add string str = s.toString(); System.out.println(str);

然後該字符串將打印由stringbuilder製作的字符串變量。

+0

第6行不打印字符數組。它通過調用它的toString方法來打印一個對象。 – bartonjs

+0

是的,我把它放在我的腦海裏,然後看到你張貼歡呼聲提醒你。我也贊同你的回答,因爲它比我的要好。 – Micktommyord

相關問題