Android基礎字符串String.md

問題拋出

String這個常量在我們代碼中會經常被用到,那麼我們瞭解 String stringbuffer StringBudilder三者之間的區別嗎

問題解答

  • String 字符串常量,位於常量池
  • stringbuffer 字符串變量 不同步適用於單線程 位於字符串緩衝區
  • StringBudilder字符串變量 同步適用於多線程 位於字符串緩衝區

1. string類型的2種賦值

String s1= "222"; //直接在常量池中開闢一個地址,如果有相同的則指向同一個地址
String s2=new String("223"); //直接在堆裏面新建一個

通過new關鍵字來生成對象是在堆區進行的,而在堆區進行對象生成的過程是不會去檢測該對象是否已經存在的。因此通過new來創建對象,創建出的一定是不同的對象,即使字符串的內容是相同的。

2. 爲什麼已經有了String還需要有stringbuffer /StringBudilder

public class Main {
    public static void main(String[] args) {
        String string = "";
        for(int i=0;i<10000;i++){
            string += "hello";
        }
    }
}
public class Main {

    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        for(int i=0;i<10000;i++){
            stringBuilder.append("hello");
        }
    }
}

上面第一個是每次都會創建一個新地址用來存儲,所以會導致真個遍歷過程十分要創建很多次,而使用stringBuilder就只會創建一次,,大大節省時間和內存空間;

4 StringBuilder與 StringBuffer

 StringBuilder:線程非安全的
 StringBuffer:線程安全的
 當我們在字符串緩衝去被多個線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章