今天說說String相關知識點

2021-10-08 13:37:45 字數 1765 閱讀 1468

如何實現以及特性

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...