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就只會建立一次,,大大節省時間和內存空間;app

4 StringBuilder與 StringBuffer

 StringBuilder:線程非安全的
 StringBuffer:線程安全的
 當咱們在字符串緩衝去被多個線程使用是,JVM不能保證StringBuilder的操做是安全的,雖然他的速度最快,可是能夠保證StringBuffer是能夠正確操做的。固然大多數狀況下就是咱們是在單線程下進行的操做,因此大多數狀況下是建議用StringBuilder而不用StringBuffer的,就是速度的緣由。ui

相關文章
相關標籤/搜索