new String和「「之間的區別

2021-10-16 18:56:13 字數 904 閱讀 9784

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。如果不...