String、StringBuilder和StringBuffer區別是什麼?

    首先,String的底層使用final修飾的字符串數組保存字符串。故對象是不可變的。而StringBuilder和StringBuffer雖然底層也是用字符串數組保存字符串。但沒有用final修飾,故可變。數組

    其次,因爲String對象不可變,故爲線程安全的。又由於StringBuilder對象是可變的,故線程不安全(主要體如今方法調用方面),因爲StringBuffer對方法加了同步鎖,因此StringBuffer是線程安全的。安全

    而後,性能方面。每次對String類型進行改變時,都會生成一個新的String對象,而後將指針指向新的String對象。因爲同步鎖的緣由,StringBuffer的性能是比Stringbuilder差的。他們兩都是對對象自己操做的,無需生成新的對象。性能

ps:建立String類型的對象時,虛擬機會在常量池中查找有沒有已經存在的值和要建立的值相同的對象,若是存在,直接賦予給當前引用。若沒有就在常量池從新建立String對象。ui

相關文章
相關標籤/搜索