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

 内存

相关文章
相关标签/搜索