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