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