关于Object类中的finalize
关Fobject类中的finalize():
1.看源码:
protected void finalize() throws Throwable { }
1)protected
2)不需要程序员手动调用的。JVM垃圾回收器进行调用
3) SUN公司准备的一个垃圾回收时机
4)它只需要重写,不需要调用
5)java垃圾回收不轻易启动,垃圾太少、时间没到,都有可能不会启动
关于Object类中的toString():
1.看源码:
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
类名@对象的内存地址转换成16进制的形式
举例:com.hqyj.demo01.MyTime@75412c2f
重写:MyTime{year=1995, month=10, day=3}
2.Sun公司设计tOString方法的目的?
Java对象转换成字符串,字符串要符合要求,易于理解
3.Sun公司开发Java语言的时候,建议所有的子类都去重写toString方法
向简洁,详实,易阅读的方式重写
关于Object类中的equals():
1.看源码:
public boolean equals(Object obj) {
return (this == obj);
}
2.Sun公司设计equals方法的目的?
判斷两个对象是否相等
3.我们需要研究一下Object类提供的默认的equals方法够不够用?
不够用,要重写!
*/
public class ObjectTest02 {
public static void main(String[] args) {
MyLove l = new MyLove(new String(“易烊千玺”),20,new String(“hip-hop”));
MyLove l1 = new MyLove(new String(“易烊千玺”),20,new String(“hip-hop”));
//System.out.println(l.equals(l1));//FALSE
//重写后:
System.out.println(l.equals(l1));//true
}
}
//我滴爱
class MyLove{
private String name;
private int age;
private String hobby;
public MyLove() {
}
public MyLove(String name, int age, String hobby) {
this.name = name;
this.age = age;
this.hobby = hobby;
}
//Alt+Insert
@Override
public String toString() {
return "MyLove{" +
"name='" + name + '\'' +
", age=" + age +
", hobby='" + hobby + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof MyLove)) return false;
MyLove myLove = (MyLove) o;
return age == myLove.age &&
Objects.equals(name, myLove.name) &&
Objects.equals(hobby, myLove.hobby);
}
@Override
public int hashCode() {
return Objects.hash(name, age, hobby);
}
//equals重写要看具体的业务
/*public boolean equals(Object obj) {
if(obj==null||!(obj instanceof MyLove)){
return false;
}
if(this==obj){
return true;
}
MyLove t = (MyLove)obj;
return this.name.equals(t.name)&&this.age==t.age&&this.hobby.equals(t.hobby);
}*/
}
关于Object类中的hashCode():
1.看源码:
public native int hashCode();
返回的是Java对象的内存地址经过哈希算法得出的一个值
等同于看做Java对象的内存地址
*/
public class ObjectTest03 {
public static void main(String[] args) {
Object o = new Object();
System.out.println(o.hashCode());//460141958
MyClass c = new MyClass();
System.out.println(c.hashCode());//1163157884
}
}
class MyClass{
}