String a = "str1";
直接赋值:如果常量池中没有str1这个字符串常亮,则直接赋值在常量池中创建一个对象。
String b = new String("str2")
通过new出来的:在如果常量池中没有没有str2这个字符串常量,则创建两个对象(一个是new String("str2")在堆中用来存储str2的地址值,另外一个是字符串常量"str2"在常量池中)。
考题:
String c = "abc";
String d = "abc";
String e = new String("abc");
System.out.println(c == d);//true
System.out.println(c == e);//false
解析:
1."=="运算符比较的是地址值。
2.c和d都是指向常量池中的字符串常量abc, e指向的则是堆中的对象new String("abc");再指向常量池中的字符串常量abc。