1. new string 與 「」 建立物件的區別
string s1 = new string("123");
string s2 = "123";
第乙個建立1~2個,第二個建立0-1個,當常量池中沒有123時,第乙個會在堆中和常量池中各建立乙個,當常量池中存在123時,第乙個則只會在堆中建立,而第二個則直接指向常量池中的123,不進行建立
2. 對於他們之間的比較判斷
string s1 = "123";
string s2 = "123";
string s3 = new string("123");
string s4 = new string("123");
string s5 = "12" + "3";
string d = "3";
string s6 = "12" + d;
system.out.println(s1 == s2); true 都指向常量池中的123 值相等
system.out.println(s1 == s3); false 乙個指向常量池中的值,乙個指向堆位址
system.out.println(s3 == s4); false 兩個值相等,但是==比較的是他們堆中的位址是否相等
system.out.println(s1 == s5); true 都是指向常量池中的值
system.out.println(s1 == s6); false 第乙個指向的是常量池中的值,第二個指向的是堆中的位址
總結:
new string () 不僅需要在常量池中建立,還需要再堆中建立
""只在常量池建立值並指向
String與new String 的區別
string與new string 的區別 jvm為了提公升效能和減少記憶體開銷,避免字串的重複建立,維護了一塊特殊的記憶體空間 字串例項池。string賦值的兩種方式。1 string str test 以這種方式賦值時,jvm會先從字串例項池中查詢是否存在 test 這個物件,如果存在,直接把例...
string與new string的區別
string本質上是final string s1 a 此時s1指的是常量池中的 a string s2 s1 b 此時s2指的是堆裡面的 ab 原來的 a 字串物件已經丟失,在堆空間裡面產生乙個字串s1 b 這樣是會降低效率,尤其是在迴圈中。string s3 ab 此時s3指向的是常量池中的 a...
String與new String 的區別
jvm為了提公升效能和減少記憶體開銷,避免字串的重複建立,維護了一塊特殊的記憶體空間 字串例項池。string賦值的兩種方式。1 string str test 以這種方式賦值時,jvm會先從字串例項池中查詢是否存在 test 這個物件,如果存在,直接把例項池中 test 的位址返回給str。如果不...