關於java new 建立對象的問題

JAVA裏面 String a = "aaa"; 和 String a = new String("aaa");有什麼區別?

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程序員筆試題概率比較高。

--https://zhidao.baidu.com/question/243555460.html?qbl=relate_question_0&word=java%20new%C3%BF%B4%CE%B6%BC%BB%E1%CC%ED%BC%D3%D7%D6%B7%FB%B4%AE%B3%D8html

--https://zhidao.baidu.com/question/81333323.html?fr=qrl&index=4&qbl=topic_question_4&word=String%20a%3D%20new%20String%28%26quot%3Baaa%26quot%3B%29%3B%20String%20b%20%3D%20new%20String%28%26quot%3Baaa%26quot%3B%29%3B%20a%BA%CDb%CF%E0%B5%C8%C2%F0java

--https://zhidao.baidu.com/question/127470445.html?qbl=relate_question_3&word=String%20a%3D%20new%20String%28%26quot%3Baaa%26quot%3B%29%3B%20String%20b%20%3D%20new%20String%28%26quot%3Baaa%26quot%3B%29%3B%20a%BA%CDb%CF%E0%B5%C8%C2%F0程序員

用構造器建立的對象,是不會被放入常理池中的,也很明顯這徹底是兩個對象,只是內容相同罷了,結果固然爲false了。用equals()或者System.out.print(a.intern()==b.intern());就返回true了。測試

-- String的Intern方法詳解http://www.cnblogs.com/wxgblogs/p/5635099.htmlspa

Java中內存分爲幾塊

-- 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
    }
}

 內存

相關文章
相關標籤/搜索