两种创建方式
public class Sun {
public static void main(String[] args) {
String name1="Tim";//第一种
String name2="Tim";
String name3=new String("Lucy");//第二种
String name4=new String("Lucy");
}
}
区别
第一种:定义name1变量时,在“栈”中开辟一个空间name1,并且在Java敞常量池中开辟一个地址存储“Tim”,此时将其地址存储在name1中。当定义另一个name2亦为“Tim”时,此时会先在常量池内寻找是否已经有相同的“Tim”,若存在则直接使用该地址存储进name2,故name1,的地址与name2地址相同。
第二种:构造方法式,每创建一个对象则在“堆”中开辟一个空间存储“Lucy”,并将其地址存储进“栈”,当定义一个name4为“Lucy”,亦在“堆”中开辟新的空间,有一个新的地址,故name3与name4地址不同。
public class Sun {
public static void main(String[] args) {
String name1="Tim";
String name2="Tim";
System.out.println(name1==name2);
String name3=new String("Lucy");
String name4=new String("Lucy");
System.out.println(name3==name2);
}
}
则此时的输出为true false。