1.直接赋值法:String name1 = "jie";
这种方法值并不会出现在堆中,而是直接出现在常量池中,而且在再进行直接赋值时String name2 = "jie";会先在常量池中寻找所赋的值是否已经存在,若存在则使变量指向值的地址,则name1于name2的地址会相同,若值不存在,则会在常量池中开辟新的空间。例:
public class Test {
public static void main(String[] args) {
String name1 = "jie";
String name2 = "jie";//直接赋值:先在常量池中寻找所赋的值是否存在,存在则将其地址赋给变量。
System.out.println(name1==name2);//在引用类型中,“==”用于比较地址是否相同。相同输出为ture,否则输出为false.此处输出为ture.
}
}
2.构造方法式:String name3 = new String("qiao");
这种方法是每创建一个对象就会在堆中直接创建一个空间,并将其地址赋给变量。即使所赋的值相同,
其地址也不相同。例:
public class Test {
public static void main(String[] args) {
String name3 = new String("qiao");
String name4 = new String("qiao");//构造方法式:每创建一个对象就会在堆中直接创建一个空间,并将其地址赋给变量。
System.out.println(name3==name4);//此处输出为false。
}
}