equals&&hashCode&&toString函数

来源:互联网 发布:cors网络账号怎么获取 编辑:程序博客网 时间:2024/05/18 01:49

equals函数

1.所有类中都继承了equals函数,equals函数存在于object

 

“==”表示两个引用是否指向同一个对象(堆内存中同一个地址)。

 

一般情况下,对象的内容相等依据:

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

boolean flag=p instanceof Student;是的话返回true

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

 

boolean a.equals(b)

如果ab对象相同,返回true

 

继承来的equals函数只能满足”==”标准,需要对equals函数进行复写

public class User{String name;int age;public boolean equals(Object obj){ if(this==obj){return true;}boolean flag=obj instanceof User;if(flag){User u=(User)obj;if(this.age==u.age&&this.name.equals(u.name))//String类型是引用,使用”==”会表示同一对象。return true;else{return false;}}else{return false;}}}public static void main(String args[]){User u1=new User();User u2=new User();u1.age=2;u1.name="sa";u2.age=3;u2.name="sd";System.out.println(u1.equals(u2));}

 

hashCode()函数

存在于Object类当中,因为所有的类的继承了Object类,所以所有的类都有上述的方法。



图中,输出null,因为mapget方法是通过找对象的哈希值找对象,由于新生成的对象和map中的对象虽然相等,但是并不是同一对象所以哈希值不一样,所以找不到。


对hashCode进行复写
一般用31,可由系统自动生成


toString()函数,调试时使用

toString(),把对象转换成一个String类型的字符串

public class User{String name;int age;public String toString(){String result="name:"+name+" age:"+age;return result;}}public class Test {public static void main(String args[]){User u1=new User();u1.age=2;u1.name="sa";System.out.println(u1);//自动调用u1的toString函数}}









1 0