在JAVA中字符串的表示有三種方式 String StringBuilder StringBuffer .數組
String是不可變的字符串,它的底層是一個用final修飾的字符數組安全
當咱們作拼接字符串操做的時候:ide
String str = 「you」;ui
Str = str+」win」;spa
底層是這樣的:線程
Str剛開始指向堆內存中的「you」,拼接字符串「win」的時候又開闢了兩塊塊內存空間一塊保存「win」,一塊保存拼接之後生成的字符串「 you win」而且str指向拼接之後的字符串,在這個過程當中一共佔用了三塊內存空間,因此效率是很是低下的。blog
StringBuilder 和 StringBuffer都繼承於:AbstractStringBuilder
他們的底層使用的是沒有用final修飾的字符數組:char[]
因此在作字符串拼接的時候就在原來的內存上進行拼接,不會浪費內存空間。繼承
StringBuilder和StringBuffer的區別是內存
StringBuilder是線程不安全的,它的執行效率比StriingBuffer要高字符串
StringBuffer是線程安全的,它的執行效率比StringBuilder要低
總結:
1.String字符串是不可變的。
2.在修改字符串操做比較多的時候用StringBuilder或StringBuffer.
在要求線程安全的狀況下用StringBuffer
在不要求線程安全的狀況下用StringBuilder