String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
用String定义字符串变量时,会先在常量池里面找有没有字符串abc,如果没有就把字符串abc放到常量池,变量名指向常量池中的地址,如果字符串已存在那么就不再重复放字符串到常量池了,变量名直接指向常量池中的地址
用new String()定义变量时,会和普通的引用类型一样,在堆中新建字符串abc,变量名指向堆中的地址