CS Notes打卡第二天 String

2021-10-05 12:15:49 字數 2545 閱讀 9699

今天是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...