#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){
}
#toString()
@Override
public String toString(){
}
#hashCode()
@Override
public int hashCode(){
}