Java-字符串資料String、StringBuilder、StringBuffer解析與區別

Java 程序設計 95後碼農 2019-06-29

Java最基礎對象-字符串(String、StringBuilder、StringBuffer)

Java-字符串資料String、StringBuilder、StringBuffer解析與區別

Java-字符串資料String、StringBuilder、StringBuffer解析與區別

字符串



字符串編程開發中最常遇到和操作的對象。尤其是在java程序設計中,字符串操作更是隨處可見,處理字符串相關的代碼幾乎佔據了你程序的半壁江山。可以說,如果不瞭解字符串對象或是不會基礎的字符串操作,在實際碼代碼的過程中,便是舉步維艱,異常難受。

當然了,java中的字符串對象和操作也是比較容易掌握的了。

記住不可變的String類

String對象是不可變的。即當創建了字符串對象之後,該對象變不能被修改了。String類中每一個看起來會修改String值的方法,實際上都是創建了一個全新的String對象,而原來的String對象還是在那裡。

看下面示例

 
public

static

void
main
(
String
[]
args
)

{

String
str1
=

"hello"
;

System
.
out
.
println
(
str1
);

// 將str1轉成大寫

String
str2
=
str1
.
toUpperCase
();

System
.
out
.
println
(
str2
);

// 再次輸出str1

System
.
out
.
println
(
str1
);

}

輸出

helloHELLOhello

String 類中最常用方法

 
public

static

void
main
(
String
[]
args
)

{

String
string
=

"hello "
;

// 返回字符串長度

int
length
=
string
.
length
();

// 截取字符串,從0開始到2,不包括2,注意字符串下標從0開始

String
str1
=
string
.
substring
(
0
,

2
);

// 去除字符串前後空格

String
str2
=
string
.
trim
();

// 判斷是否包含某個字符或字符串

boolean
isContain
=
string
.
contains
(
"he"
);

// 判斷是否以某個字符串開始

boolean
isStart
=
string
.
startsWith
(
"hh"
);

// 判斷是否以某字符串結束

boolean
isEnd
=
string
.
endsWith
(
"hei"
);

// 返回字符串在當前字符串中第一次出現的位置

int
lIndex
=
string
.
indexOf
(
"l"
);

// 返回字符串在當前字符串中最後一次出現的位置

int
lastIndex
=
string
.
lastIndexOf
(
"l"
);

// 一般使用特殊字符分割得到字符串數組

String
[]
strArr
=
string
.
split
(
";"
);

// 判斷字符串是否相等

boolean
isEqual
=
string
.
equals
(
"hello"
);

// 獲取字符串的字節數組

byte
[]
bytes
=
string
.
getBytes
();

}

記住這些,基本能應付80%以上的使用場景了。其他的使用方法請自行查閱JDK文檔。

String類重載“+”操作符

重載“+”操作符的意思,就是“+”操作符的應用於String類時,被賦予了特殊的意義。

“+”可以用來連接多個String。

示例

 
public

void
testString01
()

{

String
str1
=

"hello"
;

String
str2
=

"java"
+
str1
+

"world"
;

System
.
out
.
println
(
str2
);

}

輸出

javahelloworld

通過此種方式生成最終字符串,會產生一些需要垃圾回收的中間對象。

建議在需要連接的字符串超過5個時,使用StringBuilder類或StringBuffer類。

StringBuilder和StringBuffer

和 String 類不同的是,StringBuilder 和 StringBuffer 類的對象能夠被多次的修改,並且不產生新的未使用對象。這兩個類最大的不同在於:

  • StringBuilder不是線程安全的
  • StringBuffer是線程安全的類,可以用在多線程環境中。

看下面示例

 
@Test

public

void
testStringBuilder
()

{

StringBuilder
strBuilder
=

new

StringBuilder
(
"hello"
);
strBuilder
.
append
(
";;"
);
strBuilder
.
append
(
"world"
);
strBuilder
.
append
(
"!!"
);

System
.
out
.
println
(
strBuilder
.
toString
());

}

輸出

hello;;world

在java語言中Java-字符串資料String、StringBuilder、StringBuffer解析與區別

1.速度問題,或者說是執行速度,在這方面運行速度快慢為:

StringBuilder > StringBuffer > String

2.安全問題:

String中的對象是不可變的,也就可以理解為常量,顯然線程安全。

StringBuffer是線程安全的。

StringBuilder是線程不安全的。

AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的,但是相對應的也會影響其執行速度。

3.應用場景:

1.String:適用於少量的字符串操作的情況

 2.StringBuilder:適用於單線程下在字符緩衝區進行大量操作的情況

3.StringBuffer:適用多線程下在字符緩衝區進行大量操作的情況

如果程序不是多線程的,使用StringBuilder效率要高於StringBuffer。

Java-字符串資料String、StringBuilder、StringBuffer解析與區別

Java-字符串資料String、StringBuilder、StringBuffer解析與區別

私我 一個 1 拿走 java 框架 項目 乾貨

相關推薦

推薦中...