equals()函数:
在Java当中可以使用==操作符来判断两个基本数据类型的变量的值是否相等,而对于引用类型变量,例如对象而言,使用==是判断两个引用是否指向堆内存当中的同一块地址。
对于对象是否相等应该使用equals()函数。该函数定义于Object类当中,但是该类当中的equals()方法仅仅是直接比较了两个对象的引用是否指向堆内存当中的同一块地址,即与==运算符的功能是一样的。所以在自己定义的类当中,应该覆写equals()函数。
一般而言,判断两个对象是否相同的主要依据有两个,在某些情况下可能判断相等的标准比较特殊:
-
两个对象是否是相同类型的对象;
-
两个对象当中的成员变量的值是否相同;
class User{ String name; int age; public boolean equals(Object obj){ if(this==obj) return true;//先判断两个引用是否指向同一块堆内存地址 if(!obj instanceof User) return false;//判断类型是否相同 else{ User user = (User)obj; if(this.age==user.age && this.name.equals(user.name))//判断成员变量是否相同 return true; else return false; } } }
hashCode()函数:
hashCode()函数用于返回某个对象的hash值,对于调用equals()函数判断为相等的两个对象,其返回的hash值也应该相等。例如:
public int hashCode(){ int result = 17;//任意一个正质数 result = 31 * result + age; result = 31 * result + name.hashCode(); return result; }
toString()函数:
toString()函数用于将对象转换成String字符串,以便程序有更好的可读性。例如:
User user = new User(); System.out.println(u);
此时就会调用user对象的toString()方法。可以自己定义toString()方法,例如:
public String toString(){ String result = "age:" + age + ",name:" + name; return result; }