Equals函数

Equals函数在Object类中,Object是所有类的父类,而Object被包含在jdk开发包中

在引用类型中,“==是判断引用是否指向同一个堆内存地址,比较变量的值时,引用数据类型不能用“==”比较,要用equals比较

在基本数据类型中指的是判断两个变量值是否相等。

Equals是用来比较两个对象的内容是否相等

class User{

String name;

int age;

//复写equals方法

public boolean equals(Object obj){

//判断两个引用是否指向两个堆内存的同一个地址

//this是指使用这个类的对象

if(this==obj){

return true;

}

//判断obj是否是User类型

boolean b=obj instanceof User;

if(b){

//obj向下转型为User类型

User u=(User)obj;

//判断两个对象的成员变量的值是否完全相同

//这里的equals是已经复写的函数,因为String是引用数据类型

//而比较引用数据类型的值是否相等,我们使用equals函数

if(this.age==u.age&&this.name.equals(u.name)){

return true;

}

else{

return false;

}

}else{

return false;

}

}

}

class Test{

public static void main(String args[]){

User u1=new User();

User u2=new User();

User u3=new User();

u1.name="zhangsan";

u1.age=12;

u2.name="lisi";

u2.age=12;

u3.name="zhangsan";

u3.age=12;

System.out.println(u1.equals(u2));

System.out.println(u1.equals(u3));

}

}

_hashCode()toString()函数

这两个函数都被包含在Object中,那么所有类都有这两个函数

class User{

String name;

int age;

public User(){

}

public User(String name,int age){

this.name=name;

this.age=age;

}

public boolean equals(Object obj){

if(this==obj){

return true;

}

boolean b=obj instanceof User;

if(b){

User u=(User)obj;

if(this.age==u.age&&this.name.equals(u.name)){

return true;

}

else{

return false;

}

}

else{

return false;

}

}

//复写hashcode方法

public int hashCode(){

int result=17;

result=31*result+age;

result=31*result+name.hashCode();//String中的hashcode方法是已经被人复写好了的

return result;

}

}

import java.util.*;

class Test{

public static void main(String args[]){

User u=new User("zhangsan",12);

HashMap<User,String> map=new HashMap<User,String>();

map.put(u,"abc");

String s=map.get(new User("zhangsan",12));

System.out.println(s);

}

}

复写toString

public String toString(){

String result="age:"+age+","+"name:"+name;

return result;

}