學習一下Java的String

來源:互聯網
上載者:User

標籤:map   安全性   方法   pool   安全執行緒   hashcode   網路連接   比較   使用   

JAVA  中為什麼 String  immutable ?

1.設計:當建立一個String(String str2 = "abc"), 如果它(原先有一個String str = "abc")已經在pool(其實是記憶體中的棧)中存在,則會返回已存在String的引用,相反,怎會建立一個新的String,並返回該引用。如果String不是immutable的,改變String的一個引用將導致另一個引用的到錯誤的值。

2.效率:允許String緩衝它的hashcode。String的hashcode在JAVA中是使用非常頻繁的。例如在HashMapzhong, String設計成immutable保證了hashcode總是一樣的,所以hashcode可以被緩衝而不用擔心改變。也就是說,不需要每次在使用hashcode時都去計算一遍,這樣更高效。

3. 安全:String廣泛的作為參數被JAVA中的類使用,比如 網路連接,開啟的檔案等等,如果String不是immutable,一個串連或檔案的改變將導致嚴重的安全威脅,一個方法還以為正串連到一個機器上,並其實沒有。可變的String同樣將導致反射的安全性問題,因為反射中的參數都是String類型的。

【附】 String StringBuffer StringBuilder

三者在執行速度方面的比較:StringBuilder >  StringBuffer  >  String

String:字串常量   StringBuffer:字串變數    StringBuilder:字串變數

  從上面的名字可以看到,String是常量, 而StringBuffer與StringBuilder就不一樣了,他們是字串變數,是可改變的對象,每當我們用它們對字串做操作時,實際上是在個對象上操作的,這樣就不會像String一樣建立一些而外的對象進行操作了,當然速度就快了。再有,StringBuilder是線程非安全的,而StringBuffer是安全執行緒的,所以StringBuilder速度最快。

學習一下Java的String(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.