今天是cs-notes打卡的第二天,與君共勉
新增鏈結描述
string類被修飾為final表示常量,不能被繼承,由此類推其他基本型別對應的包裝類
也不能被繼承
jdk1.8 底層由char陣列構建 private final char value;
jdk1.9之後 底層由byte陣列和coder編碼格式表示private final byte value;
private final byte coder;
基本陣列被定義成常量,當陣列被賦值之後就不能再修改,同時string內部也沒有提供修改方法,保證了不可變性
if
(compact_strings)
}this
.coder = utf16;
@native
static
final
byte latin1 =0;
@native
static
final
byte utf16 =
1;
在jdk1.9之後不再用char當底層陣列,而是用byte陣列,如果字元中只包含latin-1,coder屬性為0反之為1string的不可變性hash值也不變,在雜湊表(hashmap)當中用string當作key,只需要計算一次hash
string pool的使用,當乙個string被建立,後續建立的string物件直接從常量池中取得
string的不可變性,可以作為傳輸引數保證前後不變
string的不可變性在多執行緒中是執行緒安全的
可變性string不可變
stringbuffer、stringbuilder可變
執行緒安全
string不可變執行緒安全、stringbuilder通過synchronized同步執行緒安全
stringbuffer執行緒不安全
string stringa =
newstring
("aaa");
string stringb =
newstring
("aaa");
string stringc =
"aaa"
;string stringd =
"aaa"
;system.out.
println
((stringa == stringb));
system.out.
println
((stringa == stringc));
system.out.
println
((stringc == stringd)
);
因為stringa、stringb都是通過建構函式new出來的乙個新物件,因此不等,而stringc建立後將aaa放入stringpool,stringd建立時從stringpool取出aaa的引用,因此a!=b a!=c c==d
intern方法
string stringa =
newstring
("bbb");
string stringb = stringa.
intern()
;string stringc =
"bbb"
;system.out.
println
((stringa == stringb));
system.out.
println
((stringa == stringc));
system.out.
println
((stringb == stringc)
);
在使用intern方法的時候會將字串放到常量池裡,同時將常量池的引用賦值給物件,同時後面賦值的時候直接從常量值中取值,因此stringa !=stringb stringa!=stringc stringb==stringc
jdk1.7之前,stringpool是放在常量池屬於永久代。而在1.8之後stringpool放在了堆中。這是因為永久代空間有限,不停的新建string會導致outofmemoryerror
string s = 「aa」
"aa"屬於字串常量,首先在stringpool中建立乙個字串物件,然後將這個物件的引用給s,如果stringpool物件中有就不需要建立新物件直接賦值字串物件的引用
string s = new string(「aa」)
首先檢查stringpool中有沒有物件,如果沒有新建,然後在堆中建立乙個新的字串物件,將stringpool中的物件的引用給堆中的物件,然後將堆中的物件給s
通過string構造方法會產生兩個物件,乙個是stringpool中的物件乙個是堆中的物件
打卡第二天
一大早就背了單詞不過這次有點不耐煩,沒有記完,而且花費時間有點多,下午去圖書館還了書,又借了幾本書,晚上和雪冰一塊做了鍛鍊大約30分鐘,又去接了逗逗,做了兩套綜合,看了下物理,發現公式都忘了,得著重看看了。晚上看了h5頁面,準備做乙個,等朋友過生日可以送乙個感覺挺好的。還是有點浮躁吧,馬上就要開學了...
打卡第二天
第一天的學習讓我受益匪淺,對於第二天的學習我充滿信心。今天主要講述了迴圈體的內容 1 while迴圈,條件為真的時候重複執行乙個 塊,當需要為乙個集合的每乙個元素執行乙個 塊的時候就需要for迴圈了。能使用for迴圈,就盡量不使用while迴圈。while 條件 else語句 迴圈體else 條件不...
CentOS打卡第二天
這篇文章講解centos介面的切換。centos預設安裝的時候的介面類似於windows的圖形介面,那麼怎樣才能將其轉化成只有終端的高大上介面呢。這個主要是修改etc下的inittab檔案 第一步 開啟終端,輸入 vi etc inittab 第二步 修改inittab檔案的內容 將啟動方式5改為3...