前言
筆者因為遇到這樣的面試題答的不夠全面,經過谷歌后在這里和大家說下,還會跟大家聊一下其應用的場景(筆者不怎么喜歡背書式地將教科書上的內容拿出來講,除非真的很必要)
String
String 對象一旦被創建,它就不能被修改,其對象會被存儲在String 常量池中。String 對象不能同時地被兩個線程使用。
StringBuffer
StringBuffer是可修改的,意味著StringBuffer 聲明的對象的值是可變的。而StringBuffer 創建的對象都會別存放在堆(heap)中,StringBuffer 和StringBuilder 有著相同的方法,但在StringBuffer的方法中,如果其方法是同步的,那么StringBuffer線程安全。
由于它不允許兩個線程同時訪問同一個方法,每個方法都只能由一個線程訪問一次。但是線程安全也會帶來缺點,那就是性能會大大折扣。因此當調用每個類的方法相同時,StringBuilder 的速度要快于StringBuffer.(這個在面試中常被問到)。
如果StringBuffer 要轉換為String 可以用toString()方法。
StringBuilder
StringBuilder 和StringBuffer 差不多相同,它們都繼承于AbstactStringBuilder,StringBuilder同樣是將新建的對象存放于堆中,也同樣能被修改.主要的區別是StringBulider線程不安全,但它的速度快。
尾語
如果上訴有誤的話,歡迎提出