String類型、表示字符串,Java中所有字符串如”123”都用(yòng)此類型爲實例、字符串是産量,他(tā)的(de)值創建後就不可(kě)以修改了(le);
應爲String是不可(kě)變類型,所以如果字符串拼接時(shí)的(de)話(huà)如果用(yòng)String的(de)話(huà)可(kě)能會降低性能,所以JDK又提供了(le)兩個(gè)可(kě)變的(de)字符串類StringBuilder和(hé)StringBuffer;
String和(hé)stringbuilder、stringbuffer的(de)區(qū)别:
1、可(kě)變性:
String類型對(duì)象一旦創建後是不可(kě)變的(de),一旦創建後知道這(zhè)個(gè)對(duì)象被銷毀都是不可(kě)以改變的(de);
Stringbuilder和(hé)stringbuffer類型字符串可(kě)以改變;
2、安全性:
String類型是對(duì)象是不可(kě)變的(de),是線程安全的(de);
Stringbuffer類型是線程安全的(de),因爲在他(tā)的(de)内部有synchronized鎖來(lái)保證線程安全;而stringbuilder類型不是線程安全的(de);
3、性能:
String類型在每次操作更改對(duì)象時(shí),都會創建出新的(de)對(duì)象,并将指針指向新的(de)對(duì)象,效率極低,stringbuffer、stringbuilder每次更改都是在對(duì)象本身進行操作,不會生成新的(de)對(duì)象來(lái)改變對(duì)象的(de)引用(yòng),性能相對(duì)較好,相同情況下(xià)stringbuilder要比stringbuffer性能好上百分(fēn)之時(shí)左右,但是stringbuilder是線程不安全的(de);
4、使用(yòng)場(chǎng)景:
少量字符串操作可(kě)以直接使用(yòng)string類型;
單線程操作字符串緩沖區(qū)大(dà)量字符串使用(yòng)stringbuilder;
多(duō)線程操作字符串緩沖區(qū)大(dà)量字符串使用(yòng)stringbuffer;