如何實現以及特性
string類被final修飾,所以string不可被繼承,integer等等的包裝類都不可以被繼承。
jdk1.8中,string底層使用final修飾的char陣列來儲存字串
private
final
char value[
];
jdk1.9之後,底層使用final修飾的byte陣列來儲存字串
private
final
byte
value;
使用final關鍵字修飾,說明這個value陣列初始化之後就不能引用其他陣列,string內部也沒有改變value陣列的方法,因此string不可變。
不可變的好處
快取雜湊值
例如hashmap中使用string作為key,因為不可變,所以雜湊值只需要一次計算,string類中也有相關**。
/** cache the hash code for the string */
private
int hash;
// default to 0
string pool(字串常量池)的需要
當乙個string物件被建立過了,就會是從string pool取得的引用,如果string可變的話,string pool就無法使用了。
執行緒安全
string,stringbuffer,stringbuilder
可變性執行緒安全
使用場景
stringpool
intern方法
可以使用 string 的 intern() 方法在執行過程將字串新增到 string pool 中。
當乙個字串呼叫 intern() 方法時,如果 string pool 中已經存在乙個字串和該字串值相等(使用 equals() 方法進行確定),那麼就會返回 string pool 中字串的引用;否則,就會在 string pool 中新增乙個新的字串,並返回這個新字串的引用。
舉例說明:
string a =
newstring
("aaa");
string b =
newstring
("aaa");
system.out.
println
(a == b)
;// false
// 使用intern取得字串引用
string c = a.
intern()
;string d = a.
intern()
;system.out.
println
(c == d)
;// true
// 如果是下面這種建立字串,會直接放入字串池中
string e =
"aa"
;string f =
"aa"
;system.out.
println
(e == f)
;// true
通俗來講,intern()方法就是獲取字串引用,沒有的話就放入池子,返回引用,有的話就直接返回引用。
所以我們進行字串賦值的時候可以使用intern()來通過引用來節省空間。
string的相關知識點
string是c 中的類,string是framework的類,c string 對映為 framework的 string。如果用string,編譯器會把它編譯成string。string為空的定義方法 1 string str null 只定義了乙個引用,未分配儲存空間。2 string str...
知識點備忘 String
substring 方法用於提取字串中介於兩個指定下標之間的字元 substring start,end 開始和結束的位置,從零開始的索引 引數 描述 start 必需。乙個非負的整數,規定要提取的子串的第乙個字元在 stringobject 中的位置。stop 可選。乙個非負的整數,比要提取的子串...
相關知識點
nweb inf uclasses uweb.xml ulib n 從httpservlet 繼承,重寫doget dopost方法 n部署web.xml n 只有乙個物件 n 第一次請求的時候被初始化,只一遍 n 初始化後先呼叫init 方法,只一遍 n 每個請求,呼叫一遍service serv...