new String会创建在堆中创建几个对象?

String s=new String(),在不同的JDK版本里,请问在JDK中在堆里有多少对象?
答:在jdk1.7以前,new出来的String,放在方法区中,1.7及以后,移到堆中去了。

/**
 * @author zhoupeng
 */
public class Main {
    //当前环境:jdk1.8 (1.7及以后,new的String由方法区迁移到了堆中)
    public static void main(String[] args) {
        String s1 = "str";
        String s2 = "str";
        //二者都直接从常量池中取,结果为true
        System.out.println(s1 == s2);


        String a = "a";
        String b = "b";
        String c = "a" + "b";
        String d = "a" + "b";
        //常量池内的可以直接合并,结果为true
        System.out.println(c == d);

        //这时会new新的String对象,两个结果都为false
        String m = a + b;
        System.out.println(c == m);
        System.out.println(d == m);
    }
}

发布了99 篇原创文章 · 获赞 46 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_35890572/article/details/103642853