java语言是一门面向对象的语言,它的核心思想便是:万物皆对象。而Object作为所有类的基类,定义了一些共性的方法。
因为目前市面上使用最多的版本是JDK 8.0 ,故本文使用的源码和API都是java 8.0的。
01 toString
public String toString()
返回该对象的字符串表示。 返回一个用于描述该对象的字符串。
源码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
从上面Object的源码可以看出,toString()方法默认返回的格式为:类名+ @ + 哈希值,如: java.lang.Object@18b3364 。默认的这种返回形式对用户来说是无意义的,因此,我们每一个类一般都会重写它的toString方法,用来返回其成员变量的值。在很多公司的代码规范中,如华为军规,每一个数据类都必须重写toString()方法。
02 equals
public boolean equals(Object obj)
用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
源码:
public boolean equals(Object obj) {
return (this == obj);
}
源码中默认比较的是两个对象的内存地址,而我们使用对象时并不想比较他们的内存地址,而是想知道他们的内容或者ID是否一致,故经常我们会重写对象的equals方法。
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id== p.id;
}
03 hashCode
public int hashCode()
返回该对象的哈希码值
源码:
public native int hashCode();
一般我们重写了一个类的equals方法,我们都会重写它的hashCode方法。
@Override
public int hashCode() {
return this.id;
}
一直想把java的知识点、API、基本类的源码好好看一遍,但因为各种各样的原因没有跟上,所以以后还是尽可能每天更新一点java的知识点,java知识点目录请戳编程-java基础目录