java中的String型別的儲存原理和一些細節

2021-07-23 22:40:40 字數 1690 閱讀 5476

string s1 = "hello";//在常量池查詢「hello」,沒有就新建乙個。s1是乙個引用,指向常量池的hello

string s2 = "hello";//s1,s2都指向常量池中的同乙個「hello」

string s3 = new string("hello");//新建乙個物件,存放在堆區中,每次呼叫都新建乙個物件。

system.out.println(s1==s2);//true 這個是判斷引用s1,s2是否指向同乙個空間,並不能判斷字串的內容是否相等。
system.out.println(s1==「hello」);//
system.out.println(s2==s3);//false 引用指向的不是同乙個位址空間
system.out.println(s3==「hello」);//false 乙個在變數池裡乙個在堆區。
system.out.println(s3.equals("hello"));//true 這個函式才是用來判斷字串內容用的
system.out.println(s1.equals("hello"));//true

string s4 = 「ab」+"cd";//編譯時優化成s4=「abcd」

string s5 = "ab"; string s6 = 「cd」; string s7 = s5 + s6; //*[1]

*[1] 

當執行s5+s6

時,jvm

首先會在堆

中建立乙個

stringbuilder

類物件,同時用s5指

向的限定字串物件完成初始化,然後呼叫

方法完成對

s6所指向的限定字串的合

並操作,接著呼叫

stringbuilder

的tostring()

方法在堆中建立乙個

string

物件,最後將剛生成

的string

物件的堆位址存放在區域性變數

s7中。而

s4儲存的是常量池中

「abcd

」所對應的限定字串物件的位址。 所以如果判斷s4==s7得到的結果會是false。

1.限定字串物件和常規字串物件

限定字串物件就如s1所指的物件,常量池只有它乙個,一般不能在常量池新增乙個一模一樣的。

常規字串物件如s3所指的物件,可以建立若干個資料域中儲存的字串一模一樣的物件。

2.intern()的用法——把常規字串物件轉化成限定字串物件

string sa = new string("hello");

string sb = sa.intern();

system.out.println(sa==sa.intern);//false

system.out.println(sb=="hello");//true

intern()在這裡做了一件事,在常量池尋找「hello」,如果有,sa.intern()返回它的位址,若沒有,在常量池新增乙個,並且返回它的位址。

Java中int和string的型別轉換

int string int i 12345 string s 第一種方法 s i 會產生兩個string物件 第二種方法 s string.valueof i 直接使用string類的靜態方法,只產生乙個物件 第三種方法 s integer.tostring i 三種方法效率排序為 integer...

java中int和String的型別互轉

一.string int的兩種方法 1.int i integer.parseint string 2.int i integer.valueof string 注 string轉成 double,float,long 的方法大同小異.二.int string的三種方法 1.string s str...

XML中的String型別

xml中的string型別定義 string,字串。可以包含回車符,換行符,製表符.qname qualified name 有字首名稱型別。字首和區域性名稱必須都是ncname型別,中間用冒號連線.normalizedstring,規範化字串型別。string中回車符 換行符 製表符將被去掉 to...