在java中String是存在于常量池中。也就是说一个String被定义之后它就被缓存到了常量池中,当其他地方使用同样的字符串时,则直接使用时缓存,而不会重复创建。
String str1 = new String("abc");
String str2 = "abc";
String str3 = new String("abc");
String str4 = "ab" + "c";
System.out.println(str1.equals(str2));
System.out.println(str1.equals(str3));
System.out.println(str2.equals(str3));
System.out.println("================================================");
System.out.println(str1==(str2));
System.out.println(str1==(str3));
System.out.println(str2==(str3));
System.out.println(str2==(str4));
输出如下:
true
true
true
================================================
false
false
false
true
string的equals只是根据字符值进行判断,因此前三个的值为true
通过“==”判断的是两个对象指向的内存地址是否相等。
str1和str3都是通过new构建出来的,而str2str4是通过字面赋值的。
最后一个通过“==”判定的值为true,也就是说是同一个对象,str4使用了缓存在常量池中str2对象