Object作为所有类的基类,它里面定义了许多的方法,最为常见的就是hashCode()、equals()、toString()方法。
一、hashCode()方法
首先来看一下什么是哈希码(HashCode)
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
二、equals()方法
String str1 = "abc";
String str2 = "abc";
System.out.println(str1.hashCode()); // 96354
System.out.println(str2.hashCode()); // 96354
System.out.println(str1 == str2); // true
System.out.println(str1.equals(str2)); // true
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str3.hashCode()); // 96354
System.out.println(str4.hashCode()); // 96354
System.out.println(str1 == str3); // false
System.out.println(str1.equals(str3)); // true
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;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
public boolean equals(Object obj) {
return (this == obj);
}
三、toString()方法
先通过代码来看一下Object类和String类的toString的方法:
Object obj1 = new Object();
System.out.println(obj1.toString()); //java.lang.Object@1e5e2c3
String str1 = "abc";
System.out.println(str1.toString()); //abc
我们可以看到String对象的toString()方法仅仅是输出了它的内容。
Object类中的toString()源代码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
String类中的toString()源代码:
public String toString() {
return this;
}