一、Object类
Object类是所有类的父类,所以所有的的类都拥有Object类中的方法。
所有对象都可以调用Object类中的方法。
二、equals
1. equals和==
- ==是比较运算符,既可以判断基本类型,也可以判断引用类型;如果判断的是基本类型,则判断值是否相等,如果判断引用类型,则判断地址是否相同。
- equals只能判断引用类型,默认判断地址,但在系统自带的子类中会被重写,判断具体内容是否相同。
2. 源码
//Object类中
public boolean equals(Object obj) {
return (this == obj);
}
//字符串类中
public boolean equals(Object anObject) {
// 如果是和自身比较直接返回true
if (this == anObject) {
return true;
}
// 如果类型一致就继续向下判断
if (anObject instanceof String) {
//向下转型
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
//逐个比较字符
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
3. 重写equals
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object myobject) {
if(this == myobject){
return true;
}
if(myobject instanceof Person){
//向下转型得到myObject的属性
Person p = (Person)myobject;
return this.name == p.name && this.age == p.age;
} else {
return false;
}
}
}
三、hashCode
- 可以提高哈希结构容器的效率。(到集合的时候具体说)
- 哈希值是根据地址来定义的,但不完全相同,可以当作地址来用,但不是地址。
- 如果两个对象指向同一地址,则hashcode相同,如果指向不同地址,则hashcode不同。
hashcode()
有需要也会重写
四、toString
1. 说明
- 返回对象的字符串表示,返回
全类名 + @ + hashcode的十六进制表示
- 一般toString方法会被重写,用于展示对象的信息。
- tostring方法默认会被调用
2. 源码
//toHexString可以将hashcode转换为16进制
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
五、finalize
这个函数几乎不会使用。
当一个对象没有任何引用时会被jvm当作垃圾回收。
在对象被回收前会调用该方法,类似vue的生命周期函数。
可以重写该函数,使得对象被销毁时触发某些事件。
垃圾回收器有自己的算法,由系统自动出发
也可以通过System.gc()
方法手动回收