05.30 「javaSE基礎」2018面試-常用API-字符串處理的性能比較

1、String、StringBuffer、StringBuilder的區別?

java平臺提供兩種類型的字符串:String和StringBuffer/StringBuilder,它們都可以存儲和操作字符串,區別如下:

「javaSE基礎」2018面試-常用API-字符串處理的性能比較

示例代碼

如上代碼所示,str僅僅是一個引用對象,它指向一個字符串"abc"。第二行代碼的含義是讓str重新指向了一個新字符串"ccc"對象,而"abc“對象沒有任何改變。StringBuffer/StringBuilder表示的字符串對象可以直接修改。StringBuilder是java5中引入的,它和StringBuffer的用法相同,區別在於StringBuilder是單線程環境下使用,因為它所有的方法都沒有被synchronized修飾,線程不安全,但其效率理論上比StringBuffer要高。

2、什麼情況下用“+”運算符進行字符串連接比調用StringBuffer/StringBuilder對象的append方法連接字符串性能更好?(華為面試題)

在Java中無論是使用哪種方法連接字符串,實際上都是使用StringBuilder。如果是多次使用"+"運算符進行字符串的連接操作,則會多次生成StringBuilder對象,雖然有垃圾回收機制,但是回收的時間是不確定的。所以在需要多次使用“+”運算符時,應該考慮StringBuffer/StringBuilder對象的append方法來提升效率。

3、請說出下面程序的輸出結果。

「javaSE基礎」2018面試-常用API-字符串處理的性能比較

案例及註釋結果

上面的面試題有兩個知識點:

  1. String對象的intern()方法會得到字符串對象在常量池中對應的版本的引用(如果常量池有一個字符串和String對象的equals的結果是true),如果常量池沒有對應的字符串,則該字符串將會被添加到常量池中,然後返回常量池中字符串的引用。
  2. 字符串的+操作其本質是創建了StringBuilder對象進行append操作,然後將拼接後的StringBuilder對象用toString方法處理成String對象。

4、如何獲取年月日、小時分鐘秒?

「javaSE基礎」2018面試-常用API-字符串處理的性能比較

「javaSE基礎」2018面試-常用API-字符串處理的性能比較


分享到:


相關文章: