一 关于Object 类的toString 方法, 返回类的全称(含包名)+@ + 类的hashcode码的16进制表示,println向console打印类变量名称时,默认打印类的toString方法得出的字符串;可以重写Object类的toString方法
二 Object和String类 的equals方法
1 Object类的equals方法的源代码
public boolean equals(Object obj) {
return (this == obj);
}
因此是比较两个参照变量是否指向同一个对象
2 String 类重写了equals方法源代码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
nt i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
因此可以看到,是比较两个字符串的内容是否相等
3 Java虚拟机会维护一个字符串池,当通过String aa = "aa"的形式给一个字符串变量赋予字符串时,会先在字符串池中查找是否有此字符串的实例,如有,则不用重新生成字符串,新变量引用此字符串;字符串是常量,当字符串通过加号拼接时,会产生新的字符串
4 实例: 比较两个字符串是否相等的情况
(1) String a = new String("aa") ;
String b = new String("aa") ;
System.out.println(a==b);
----------------------------------返回false , 两个不同的对象的比较
System.out.println(a.equals(b));
----------------------------------返回true , 两个字符串的内容相等
(2) String a = "aa" ;
String b = "aa" ;
System.out.println(a==b);
----------------------------------返回true , 两个相同的对象的比较
System.out.println(a.equals(b));
----------------------------------返回true , 两个字符串的内容相等
(3) String a = new String("aa") ;
String b = "aa" ;
System.out.println(a==b);
----------------------------------返回false , 两个不同对象的比较
System.out.println(a.equals(b));
----------------------------------返回true , 两个字符串的内容相等