您的位置:首页 > 移动开发 > Objective-C

重写Object类中的方法

2013-04-19 09:06 190 查看
#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();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: