[Java学习]Striing StringBuffer StringBuilder 的比
最近發現對java中一些比較基礎的東西掌握還是不夠,比如今天遇到的String,StringBuffer,StringBuilder之間的區別。這篇文章為大家詳細解釋這三者之間的區別。
三者速度上的較量:
StringBuilder > StringBuffer ?>String.
這是為什么呢?為什么String的效率最低?我
String:字符串常量
StringBuffer:字符串變量
StringBuilder:字符串變量
從上面的名字可以看到,String是“字符串常量”,也就是不可改變的對象。對于這句話的理解你可能會產生這樣一個疑問? ,比如這段代碼:
<span style="font-size:14px;">String str = "qwerty"; str = str+1; System.out.print(str);</span>輸出結果:qwert1
從上面的例子可以看到str明明是被我們改變了的。為什么說String不可改變昵?其實這是一種欺騙。我們可以用JVM來解釋這段代碼:
首先創建String對象str,再給它賦值qwerty;再創建一個新的String對象str,讓它執行第二行代碼,所以我們每次調用String對象時其實是創建一個新的String對象。而之前的String對象會通過GC自動回收。所以String的效率才會這么低。 而StringBuffer與StringBuilder就不一樣了,他們是字符串變量,是可改變的對象,每當我們用它們對字符串做操作時,實際上是在一個對象上操作的,這樣就不會像String一樣創建一些而外的對象進行操作了,當然速度就快了。StringBuilder與 StringBuffer?
StringBuilder:線程非安全的
StringBuffer:線程安全的
當我們在字符串緩沖去被多個線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。
?
?????????? 對于三者使用的總結: 1.如果要操作少量的數據用 = String
?????????? ? ?2.單線程操作字符串緩沖區 下操作大量數據 = StringBuilder
???????????? ?3.多線程操作字符串緩沖區 下操作大量數據 = StringBuffer
總結
以上是生活随笔為你收集整理的[Java学习]Striing StringBuffer StringBuilder 的比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTTP常用状态码说明
- 下一篇: 面向对象的编程学习笔记