前言
筆者因為遇到這樣的面試題答的不夠全面后裸,經(jīng)過谷歌后在這里和大家說下砾跃,還會跟大家聊一下其應(yīng)用的場景(筆者不怎么喜歡背書式地將教科書上的內(nèi)容拿出來講矫户,除非真的很必要)
String
String 對象一旦被創(chuàng)建猿棉,它就不能被修改磅叛,其對象會被存儲在String 常量池中。String 對象不能同時地被兩個線程使用萨赁。
StringBuffer
StringBuffer是可修改的弊琴,意味著StringBuffer 聲明的對象的值是可變的。而StringBuffer 創(chuàng)建的對象都會別存放在堆(heap)中,StringBuffer 和StringBuilder 有著相同的方法杖爽,但在StringBuffer的方法中敲董,如果其方法是同步的,那么StringBuffer線程安全慰安。
由于它不允許兩個線程同時訪問同一個方法腋寨,每個方法都只能由一個線程訪問一次。但是線程安全也會帶來缺點化焕,那就是性能會大大折扣萄窜。因此當(dāng)調(diào)用每個類的方法相同時,StringBuilder 的速度要快于StringBuffer.(這個在面試中常被問到)撒桨。
如果StringBuffer 要轉(zhuǎn)換為String 可以用toString()方法查刻。
StringBuilder
StringBuilder 和StringBuffer 差不多相同,它們都繼承于AbstactStringBuilder凤类,StringBuilder同樣是將新建的對象存放于堆中穗泵,也同樣能被修改.主要的區(qū)別是StringBulider線程不安全,但它的速度快踱蠢。
尾語
如果上訴有誤的話火欧,歡迎提出