String 直接賦值和new 物件的
阿新 • • 發佈:2018-12-17
用一個簡單的例子表述Stirng直接賦值和new物件的區別
String a = new String(“a”);
String b = new String(“a”);
//此處是比較的是物件引用的地址
System.out.println(“比較記憶體地址是否相等”);
System.out.println(a==b);(此處結果為false)
//此處比較的是字串的值
System.out.println(“比較值是否相等”);
System.out.println(a.equals(b));(此處結果為true)
說明:
new出來的是物件,是要在堆中開闢記憶體,有相應的地址的
但是這裡面還有需要注意的地方。那就是在定義a的時候,用new關鍵字在堆記憶體開闢一個記憶體區域,但是同時 如果常量池裡面沒有 “a”,那麼它也會往常量池存放“a”。也就是說new的時候,實際是再記憶體中開闢兩個地方存放“a”,一個在堆記憶體上,一個在常量池。
//直接賦值的是存在常量池中的
String e = “a”;
String f = “a”;
System.out.println(“比較值是否相等”);
System.out.println(e.equals(f));(此處結果為true)
直接進行賦值時,==和equals方法其實是一樣的效果。
參考連結: https://blog.csdn.net/weililansehudiefei/article/details/71224029