String, StringBuffer,StringBuilder的區別
Java中String、StringBuffer、StringBuilder是編程中經常使用的字串類,
現在總結一下,看看他們的不同與相同,
1.可變與不可變
String類中使用字符陣列保存字串,如下就是,因為有“final”修飾符,所以可以知道string物件是不可變的,
private final char value[];
String為不可變物件,一旦被創建就不能修改它的值,對于已存在的String物件的修改都是重新創建一個新的物件,然后把新的值保存進去.
StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,
在AbstractStringBuilder中也是使用字符陣列保存字串,以下這兩種物件都是可變的,char[] value;
StringBuffer是一個可變物件,當對他進行修改的時候不會像String那樣重新建立物件,它只能通過建構式來建立,
如:
StringBuffer sb = new StringBuffer();但是不能通過賦值符號對他進行付值, 如:
sb = "Hello word";物件被建立以后,在記憶體中就會分配記憶體空間,并初始保存一個null.向StringBuffer中賦值的時候可以通過它的append方法.
如:
sb.append("hello");
2.是否多執行緒安全
String中的物件是不可變的,也就可以理解為常量,顯然是執行緒安全的,
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字串的基本操作,
如:expandCapacity、append、insert、indexOf等公共方法,
StringBuffer對方法加了同步鎖或者對呼叫的方法加了同步鎖,所以是執行緒安全的,
StringBuilder并沒有對方法進行加同步鎖,所以是非執行緒安全的,
3.StringBuilder與StringBuffer共同點
StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類),
抽象類與介面的區別之一:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重復寫已經存在的方法;而介面中只是對方法的申明和常量的定義,StringBuilder、StringBuffer的方法都會呼叫AbstractStringBuilder中的公共方法,如super.append(...);,只是StringBuffer會在方法上加synchronized關鍵字,進行同步,
最后,如果程式不是多執行緒的,那么使用StringBuilder效率高于StringBuffer,
效率比較:String < StringBuffer < StringBuilder ,
但是在String s1 =“He”+“ll”+“o”時,String效率最高,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543714.html
標籤:Java
