String,StringBuilder,StringBuffer的區別

在JAVA中字符串的表示有三種方式  String  StringBuilder  StringBuffer .數組

String是不可變的字符串,它的底層是一個用final修飾的字符數組安全

image.png

當咱們作拼接字符串操做的時候:ide

String str = 「you」;ui

Str = str+」win」;spa

底層是這樣的:線程

image.png

Str剛開始指向堆內存中的「you」,拼接字符串「win」的時候又開闢了兩塊塊內存空間一塊保存「win」,一塊保存拼接之後生成的字符串「 you win」而且str指向拼接之後的字符串,在這個過程當中一共佔用了三塊內存空間,因此效率是很是低下的。blog

 

StringBuilder 和 StringBuffer都繼承於:AbstractStringBuilder
他們的底層使用的是沒有用final修飾的字符數組:char[]


image.png


因此在作字符串拼接的時候就在原來的內存上進行拼接,不會浪費內存空間。繼承

StringBuilder和StringBuffer的區別是內存

StringBuilder是線程不安全的,它的執行效率比StriingBuffer要高字符串

StringBuffer是線程安全的,它的執行效率比StringBuilder要低

 

總結:

1.String字符串是不可變的。

2.在修改字符串操做比較多的時候用StringBuilder或StringBuffer.

在要求線程安全的狀況下用StringBuffer

在不要求線程安全的狀況下用StringBuilder

相關文章
相關標籤/搜索