Object类是所有类的父类,所以所有的的类都拥有Object类中的方法。
所有对象都可以调用Object类中的方法。
//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;
}
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的十六进制表示
//toHexString可以将hashcode转换为16进制
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这个函数几乎不会使用。
当一个对象没有任何引用时会被jvm当作垃圾回收。
在对象被回收前会调用该方法,类似vue的生命周期函数。
可以重写该函数,使得对象被销毁时触发某些事件。
垃圾回收器有自己的算法,由系统自动出发
也可以通过System.gc()
方法手动回收