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。
私我 一個 1 拿走 java 框架 項目 乾貨