如何修改String型別的字串

2021-09-28 17:12:09 字數 1374 閱讀 9582

眾所周知,string型別的字串往往被寫入常量池中,我們無法對其進行直接的修改,只能對其另外賦值

比如:

string s =

" a b ";s.

trim()

;system.out.

println

("!"

+ s +

"!")

;

得出的結論是

! a b !
這時,可能有人問

當中不是有trim()對前後空格進行了剔除麼,怎麼回事?

其實這個問題,不難回答

因為string型別的字串在常量池中,我們不能對其直接進行修改,因為只能另外賦值

比如:

string s =

" a b "

;s = s.

trim()

;system.out.

println

("!"

+ s +

"!")

;

得出

!a b!
那我們有沒有辦法直接對string型別的字串進行修改呢?

答案是可以的

但在修改前,我們要先清楚為什麼string型別的字串無法直接修改

(有同學會說,因為在常量池中呀)

那麼如何在**中體現這一點呢?

讓我們點開string的原始碼

通過紅框,我們發現原來string型別的字串被final修飾,並且還是私有化了

那麼我們就要繞過私有化,取得value成員才能對string型別的字串進行修改

string s =

" a b "

;class aclass

= s.

getclass()

;field f = aclass.

getdeclarefield

("value");

//因為char被私有化了,我們就要繞開驗證機制,不然無法直接取得char陣列的屬性

f.setaccessible

(true);

char

cs =

(char

)f.get

(s);

cs[2]=

'd';

system.out.

println

("!"

+ s +

"!")

;

得出

! adb !

String字串型別

strlen key 擷取key值的長度 incr key 每執行一次值加1 decr key 每執行一次值減1 incrby key 步長 每執行一次值加 步長 decrby key 步長 每執行一次值減 步長 getrange key start end 擷取key值從幾到幾的字串 第乙個字串預...

Redis的字串型別 String

string是redis最基本的型別,你可以理解成與memcached一模一樣的型別,乙個key對應乙個value。string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg或者序列化的物件 string型別是redis最基本的資料型別,乙個鍵最大能儲存512mb。...

mysql 修改字元 如何修改mysql字元

今天又獨到了mysql亂碼問題,過去總是匆匆的解決了就算了。這次我實在受不了了。每次都是迷迷糊糊的改好的。這次決定好好探索一把,看了很多資料及部落格之後才理解了點。先記錄下來。如有不對的請指正。1.首先mysql是在4.0之後才支援多字符集的。所以只有4.0之後才會出現這種問題。編碼轉換的規則就是,...