重写Object类中的方法

#Object类
1.protected Object clone(): 创建并返回此对象的一个副本。
2. boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
3.protected void finalize():gc之前,JVM调用。
4.String toString(): 返回该对象的字符串表示。
5.int hashCode(): 返回该对象的哈希码值,为哈希表提供部分算法。

#cloneable接口:sun为clone()定义了规范,实现cloneable接口才可以实现克隆
写给JVM,不需要重写任何方法,是标记接口

#实现克隆
1.实现Cloneable接口
2.重写Clone(),改访问权限

#finalize()是在JVM在GC完成之前自动调用的,但GC不受该方法影响
一般可以在该方法中释放一些非关键资源
关键资源最好还是程序员控制释放,比如:数据库连接

#equals()用于比较对象之间的相等
equals起源:
Student s1=new Student(1,"li");
Student s2=new Student(1,"li");
现实世界中,s1==s2
计算机中,s1!=s2

在java中,运算符不可以重写,所以在Object中定义了对象比较相等的方法(equals),然后子类可以根据自己的比较原则对该方法进行重写

#==比较的是内存的地址,equals()可以根据自己的需要进行重写。
Object中,equals()和==相同,因为是用==实现的
public boolean equals(Object obj)

#关于equals和==的应用:
1.基本类型的比较用==
2.引用类型和null比较用==
3.引用类型的比较用equals
4.引用类型的地址比较用==

#从语法上来说,equals和hashCode是独立的,但java中定义的hashCode的规范,使得两个方法连在一起。equals为true的两个对象,哈希码必须相同。
#重写equals,必须也要重写hashCode。
API规定:“当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。”

#当System.out.println/print打印对象时
+字符串连接对象时
自动调用对象的toString()。

#一般来说,类都建议重写toString()方法

下面介绍常用的重写方式(程序按需求重写方法,需求不一样,重写的方法便不一样):

#equals(Object obj):

@Override

public boolean equals(Object obj){

   if(obj == null){

       return fasle;

   }else if(obj instanceof Xx){        //Xx表示你正在写的那个类

       Xx x = (Xx)obj;                 //x表示强制类型转换后的对象

       return this.xX == x.xX;         //xX表示类里的某一属性(数值型)

       //如果属性是引用型,则使用return this.xX.equals(x.xX);

   }

       return fasle;

}

#toString()

@Override

public String toString(){

    return xX + "";

}

#hashCode()

@Override

public int hashCode(){

    int type = 31;

    return type * 41 +xX.hashCode();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值