超类Object
类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。这些方法可以分为9种。常被重写的方法:toString()、equals(obj)、hashCode();线程相关的方法:notify()、notifyAll()、wait();另外三种:clone()、getClass()、finalize()。
1、equals ————————————————————————
public boolean equals(Object obj)
作用:常用于比较其他某个对象是否与此对象相等。
源码:
public boolean equals(Object obj) {
return (this == obj);
}
可见equals()方法的底层是通过==实现的,但这样的意义不是很大,通常会对其以及hashCode()一并重写。
注意:equals和==的区别
- == 比较
- 基本类型:比较的就是值是否相同。
- 引用类型:比较的是地址是否相同。
- equals 比较
- 基本类型:比较的是值是否相同,但要是基本类型对应的包装类型才能使用equals比较。
- 引用类型:默认比较的是地址,但绝大多数情况下都会对equals进行重写,重写之后一般都是比较值否是相同,成员变量是否相同等。
补充:Java重写了equals的常用类有哪些?
2、hashCode ——————————————————————
public int hashCode()
作用:返回该对象的哈希码值。
源码:
public native int hashCode();
该方法是一个native修饰的方法,具体实现是通过其他语言编写的,Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
JNI是Java本机接口(Java Native Interface),是一个本机编程接口,它是Java软件开发工具箱(Java Software Development Kit,SDK)的一部分。JNI允许Java代码使用以其他语言编写的代码和代码库。Invocation API(JNI的一部分)可以用来将Java虚拟机(JVM)嵌入到本机应用程序中,从而允许程序员从本机代码内部调用Java代码。
3、toString ———————————————————————
作用:返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。
源码:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
通常可以通过编辑器自动生成重写的toString()方法,以便输出一些更友好的信息,常用于日志的输出中。