Java String和new String,Stringbuilder,StringBuffer

    工作中遇到字符串相關的BUG,OOM了,所以去看了下崩潰的日誌,在Array類中,數組的崩潰,於是詳細的查閱了一下Java字符串中的工作原理,就是下面的這個圖啦,轉載自最後的鏈接博客。



簡單總結下:

1)String str = "a"

這種字符串,是在編譯期作爲一個常量保存在字符串常量池的,本質上是個Char[] 數組。

如果又String str2 ="a" ,因爲之前字符串常量池中有這個常量,那麼會複用,(反正是常量又不會變化)

2)String str = new String("a")

這種在裝載期在常量池創建"a" 對象,在運行期創建String對象,字符串常量池並沒有。如果對String 使用 intern()這個會與字符串常量池中建立聯繫,沒有會創建常量,有會複用常量。

3)字符串拼接:

String c = "a"+"b"; 在編譯器的時候會作爲一個整體常量來編譯。

在運行期拼接字符串其實都是StringBuilder,而“+”則會重複創建丟棄Stringbuider,故而效率會低

StringBuffer,和StringBuilder,都是在堆區域的對象,是可以變的類似。只是在StringBuffer中加了synchronized 鎖線程安全,效率也低了下來。

點擊打開鏈接

https://www.cnblogs.com/xiaoxi/p/6036701.html

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