string和string builder的區(qū)別 stringbuffer和stringbuilder的異同?
stringbuffer和stringbuilder的異同?stringbuffer 一下簡(jiǎn)稱(chēng)buffer stringbuilder 以下簡(jiǎn)稱(chēng)builder buffer 是線程安全的,builde
stringbuffer和stringbuilder的異同?
stringbuffer 一下簡(jiǎn)稱(chēng)buffer stringbuilder 以下簡(jiǎn)稱(chēng)builder buffer 是線程安全的,builder是不安全的。 buffer 速度慢,builder速度快。 其實(shí)在string ss “ss”;的過(guò)程中,就是調(diào)用兩次stringbuffer,StringBuffer sa new StringBuffer() (
string、stringbuffer和stringbuilder有什么區(qū)別?
在java中有3個(gè)類(lèi)來(lái)負(fù)責(zé)字符的操作。
是進(jìn)行單個(gè)字符操作的,
對(duì)一串字符進(jìn)行操作。不可變類(lèi)。
也是對(duì)一串字符進(jìn)行操作,但是可變類(lèi)。
String:
是對(duì)象不是原始類(lèi)型.
為不可變對(duì)象,一旦被創(chuàng)建,就不能修改它的值.
對(duì)于已經(jīng)存在的String對(duì)象的修改都是重新創(chuàng)建一個(gè)新的對(duì)象,然后把新的值保存進(jìn)去.
String 是final類(lèi),即不能被繼承.
StringBuffer:
是一個(gè)可變對(duì)象,當(dāng)對(duì)他進(jìn)行修改的時(shí)候不會(huì)像String那樣重新建立對(duì)象
它只能通過(guò)構(gòu)造函數(shù)來(lái)建立,
StringBuffer sb new StringBuffer()
note:不能通過(guò)付值符號(hào)對(duì)他進(jìn)行付值.
sb to here!//error
對(duì)象被建立以后,在內(nèi)存中就會(huì)分配內(nèi)存空間,并初始保存一個(gè)null.向StringBuffer
中付值的時(shí)候可以通過(guò)它的append方法.
(hello)
StringBuilder:
是一個(gè)可變對(duì)象,和StringBuffer相比,不是線程安全的,一般用在單個(gè)線程操作的時(shí)候(這種情況很普遍,所以一般優(yōu)先選用StringBuilder),速度比StringBuffe快很多。
字符串連接操作中StringBuffer的效率要比String高:
String str new String( to )
str here
的處理步驟實(shí)際上是通過(guò)建立一個(gè)StringBuffer,讓侯調(diào)用append(),最后
再將StringBuffer toSting()
這樣的話(huà)String的連接操作就比StringBuffer多出了一些附加操作,當(dāng)然效率上要打折扣.
并且由于String 對(duì)象是不可變對(duì)象,每次操作Sting 都會(huì)重新建立新的對(duì)象來(lái)保存新的值.
這樣原來(lái)的對(duì)象就沒(méi)用了,就要被垃圾回收.這也是要影響性能的.
看看以下代碼:
將26個(gè)