string s1 = "hello";//在常量池查詢「hello」,沒有就新建乙個。s1是乙個引用,指向常量池的hellostring 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
*[1]string s4 = 「ab」+"cd";//編譯時優化成s4=「abcd」
string s5 = "ab"; string s6 = 「cd」; string s7 = s5 + s6; //*[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...