本帖最后由 ζ_____________ 于 2014-9-29 17:28 编辑
对于"Fightin黑马"同学的误解以及自己的错误深表歉意...现已将原帖修 对于自己的错误道声对不起.
EG:
String str1 = "abc";
String str2 = new String("abc");
String str3 = "abc";
System.out.println(str1.equals(str2)); //true;
System.out.println(str1==str2);//false;
System.out.println(str1==str2);//true;
s1在内存中有一个对象;s2在内存中有两个对象.
但是String类中的euqlas()在String类中复写了,这里的equals比较的是两个字符串中的内容是否相等.
s1指向一个字符串对象,s3指向一个字符串对象.因为这个"abc"的字符串对象已经在内存中存在了,
作为字符串这样特殊的对象,在常量池中存在的数据,s3在重组的时候发现"abc"已经在常量池中存在,他就不会再独立开辟空间了.
因为再开辟空间的时候,会发现比较浪费空间."abc"已经存在已经不能被改变,就没有必要再开辟空间来给它分配了.
为了节约内存,在String这个对象当中,只要内容相同的话. s1 和 s3都代表着同一个对象.
这样理解完之后可能对你怎样复写 集合类中的 equals方法会有些帮助的^^
|