创建方式
方法一:
String name ="wjq";
方法二:
String name =new String("wjq");
区别
为了正确充分阐述两者之间的区别,不妨多创建几组字符串。代码如下:
需要说明的是:引用类型比较地址的常用方法为(引用类型变量1==引用类型变量2),结果为boolean型,即true/false。
public class Test {
public static void main(String[] args) {
String name ="wjq";
String name1 = "wjq";
String name2 ="957";
String name3 =new String("wjq");
String name4 =new String("wjq");
System.out.println(name == name1);
System.out.println(name1 == name2);
System.out.println(name2 == name3);
System.out.println(name3 == name4);
System.out.println(name);
}
}
结果为:
true
false
false
false
直接赋值的方法中,变量的首地址储存在栈中,而内容存在于常量池中。在赋值时,如果常量池中没有与要赋值对象的内容,则在常量池直接创建新的空间赋给变量,反之,如果存在与要赋值对象相同内容,则直接将字符串的地址返回。
而第二种方法,变量的首地址储存在栈中,而内容存在于堆中。只要定义新的变量,无论内容是否相同,都在栈中开辟空间储存首地址,在堆中储存数。
借图辅助理解: