java判斷stringbuilder不為空 string、stringbuffer和stringbuilder有什么區別?
string、stringbuffer和stringbuilder有什么區別?java中有三個類負責字符的操作。是一個單字符操作,對字符串進行操作。不可變類。它也對字符串進行操作,但它是可變的。Str
string、stringbuffer和stringbuilder有什么區別?
java中有三個類負責字符的操作。
是一個單字符操作,
對字符串進行操作。不可變類。
它也對字符串進行操作,但它是可變的。
String:
該對象不是原始類型。
作為不可變對象,一旦創建,其值就不能修改。
對現有字符串對象的任何修改都是創建一個新對象,然后保存新值。
String是最終類,也就是說,它不能被繼承。
StringBuff:
是一個可變對象,當它被修改時,不會像String一樣重新建立。
它只能由構造函數建立,
StringBuff:罐頭公司。;不要通過支付價值符號來向他支付價值。
sb歡迎來到這里!//錯誤
對象建立后,會在內存中分配內存空間,最初會保存一個null。到StringBuff:
是一個變量對象,與StringBuff:。
字符串字符串新字符串(歡迎使用)
str在這里
其實的處理步驟就是建立一個StringBuffer,讓侯調用append(),最后,
然后StringBuffer toSting()
這種情況下,String的連接操作會比StringBuffer多一些額外的操作,當然效率會打折扣。
而且因為String對象是不可變的,每次操作Sting都會重新建立一個新的對象來保存新的值。
這樣原來的對象就沒用了,會被垃圾回收,也會影響性能。
請看下面的代碼:
26個英文字母被添加了5000次,
字符串tempstr abcdefghijklmnopqrstuvwxyz
int乘以5000
long lstart1()
字符串str
for (int i 0 i lt times i ) {
str tempstr
}
長lend1()
長時間(lend1 - lstart1)
(時間)
可惜我的電腦不是超級計算機,每次結果也不一定一樣,一般是46687左右。
那是46秒。
讓 讓我們再看一下下面的代碼。
字符串tempstr abcdefghijklmnopqrstuvwxyz
int乘以5000
long lstart2()
StringBuffer sb new StringBuffer()
for (int i 0 i lt times i ) {
(臨時)
}
長lend2()
長時間2 (lend2 - lstart2)
(時間2)
結果是16,有時是0。
所以結論很明顯,StringBuffer的速度幾乎是String的一萬倍。當然這個數據不是很準確。因為循環次數是10萬,所以差別更大。如果你不喜歡,試試看。;不要相信我。
根據以上所述:
str在這里
其實的處理步驟就是建立一個StringBuffer,讓侯調用append(),最后,
然后StringBuffer toSting()
所以這里的str可以等同于
新的字符串緩沖區
(此處)
str()
所以上面直接用來連接String的代碼基本可以等價于下面的代碼。
字符串tempstr abcd:需要在程序中頻繁修改和連接字符串,使用StringBuff
string類和stringbuild類的區別為什么一定要有這兩個類?
兩個類的工作原理不同。:String類是傳統的修改。改變字符串的,它確實可以完成將一個字符串添加到另一個字符串的工作,但是在。NET框架,這個操作真的不劃算。因為系統先將兩個字符串寫入內存,然后刪除原來的string對象,再創建一個String對象,讀取內存中的數據并賦給它。來來去去花了很多時間。
在系統下使用StringBuilder類時,情況并非如此。文本名稱空間。它提供的Append方法可以在已有對象的原位置修改字符串,簡單直接。
如果要給一個字符串增加很多操作,StringBuilder類花費的時間和String類根本不是一個數量級。