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

关于java中Object类的某些方法的总结

2015-07-30 11:18 471 查看
最近看了下在开发中常用的Object类的一些方法,如equals,hashCode还有toString方法,下面一一说明;

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

1.equals:

equals函数在Object这个函数中,Object是所有类的父类,那么所有的类都有equals方法

要谈到equals的作用不得不说的是“==”的作用,“==”的作用总结如下:

1.对于基本数据类型,那么就是比较两个值是否相等

2.对于引用数据类型,双等号的作用是判断两个引用是否指向堆内存中的同一个地址

实例:

User u1=new User();
User u2=new User();
User u3=u1;
栈内存有三个数据,堆内存有两个数据

而equlas是用来比较两个对象的内容相等

对象的内容相等需要符合两个条件:

1.对象的类型相同(可以使用instanceof操作符进行比较)

2.两个对象的成员变量的值完全相同

instanceof是一个操作符

obj instanceof User

判断前面一个对象是否是后面这个对象的类型

Object中equals方法并不实用,一般需要复写

//复写equals方法
@Override
public boolean equals(Object obj) {
if(this==obj){
//用双等号比较,说明在堆内存中指向的是同一个对象,值自然相等
return true;
}
boolean b=obj instanceof User;
if(b){
User u=(User) obj;  //向下转型不一定成功,有时必须先向上转,再下转型
//String是引用数据类型,这里调用String里面的equals方法,已经复写好了
//比较成员变量
if(this.age==u.age&&this.name.equals(u.name)){
return true;
}else{
return false;
}

}else{
return false;
}
}


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.hashCode:

hashCode方法主要用于类集框架框架中,也需要复写

@Override
public int hashCode(){
//定义一个质数,只要不是0
int result=17;
//31乘法可以用位移来代替,这样做性能是最好的
result=31*result+age;
result=31*result+name.hashCode();

return result;
}


Map<User,String> map=new HashMap<User,String>();
map.put(u, "abc");


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3.toString:

toString方法比较简单,主要用来增加程序的可读性

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