眾所周知,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之後才會出現這種問題。編碼轉換的規則就是,...