String a = "aaa"; 用這種方式的時候java首先在內存中尋找"aaa"字符串,若是有,就把aaa的地址給它 若是沒有則建立 String a = new String("aaa"); 是無論內存中有沒有"aaa" 都開闢一塊新內存保存它 能夠用如下方法驗證下 String a = "aaa"; String b = "aaa"; String c = new String("aaa"); System.out.println(a==b); System.out.println(a==c); 結果應該是: true false 此題做爲java程序員筆試題概率比較高。
用構造器建立的對象,是不會被放入常理池中的,也很明顯這徹底是兩個對象,只是內容相同罷了,結果固然爲false了。用equals()或者System.out.print(a.intern()==b.intern());就返回true了。測試
-- String的Intern方法詳解(http://www.cnblogs.com/wxgblogs/p/5635099.html)spa
-- https://zhidao.baidu.com/question/435425677.html.net
詳解 JAVA 建立對象 NEWhtm
-- https://my.oschina.net/klog/blog/794910對象
測試代碼:blog
public class NewClass {
public static void main(String[] args) {
String a = "aaa";
String b = "aaa";
String c = new String("aaa");
String d = new String("aaa");
System.out.println(a==b); //true
System.out.println(b==c); //false
System.out.println(c==d); //false
}
}
內存