1、String、StringBuffer、StringBuilder的區別?
java平臺提供兩種類型的字符串:String和StringBuffer/StringBuilder,它們都可以存儲和操作字符串,區別如下:
如上代碼所示,str僅僅是一個引用對象,它指向一個字符串"abc"。第二行代碼的含義是讓str重新指向了一個新字符串"ccc"對象,而"abc“對象沒有任何改變。StringBuffer/StringBuilder表示的字符串對象可以直接修改。StringBuilder是java5中引入的,它和StringBuffer的用法相同,區別在於StringBuilder是單線程環境下使用,因為它所有的方法都沒有被synchronized修飾,線程不安全,但其效率理論上比StringBuffer要高。
2、什麼情況下用“+”運算符進行字符串連接比調用StringBuffer/StringBuilder對象的append方法連接字符串性能更好?(華為面試題)
在Java中無論是使用哪種方法連接字符串,實際上都是使用StringBuilder。如果是多次使用"+"運算符進行字符串的連接操作,則會多次生成StringBuilder對象,雖然有垃圾回收機制,但是回收的時間是不確定的。所以在需要多次使用“+”運算符時,應該考慮StringBuffer/StringBuilder對象的append方法來提升效率。
3、請說出下面程序的輸出結果。
上面的面試題有兩個知識點:
- String對象的intern()方法會得到字符串對象在常量池中對應的版本的引用(如果常量池有一個字符串和String對象的equals的結果是true),如果常量池沒有對應的字符串,則該字符串將會被添加到常量池中,然後返回常量池中字符串的引用。
- 字符串的+操作其本質是創建了StringBuilder對象進行append操作,然後將拼接後的StringBuilder對象用toString方法處理成String對象。
4、如何獲取年月日、小時分鐘秒?
閱讀更多 紅魚程序員生活 的文章