Java4Android(第44~45集)equals、hashCode、toString

来源:互联网 发布:nodejs php 性能对比 编辑:程序博客网 时间:2024/05/21 10:57
第44集 equals函数的作用
本集主要内容.
  1. equals函数在什么地方.
  2. equals函数的作用.
  3. 复写equals函数的方法.
 a.  equals被包含在object中,object是所有类的父类.      所以所有类都继承了equals方法.
 b.  双等号的作用,判断两个引用是否指向堆内存中的同一块地址.或者   是同一个对象.
equals函数的作用.是来比较两个对象的内容是否相等.
     在通常情况下两个对象内容是否相等.要符合两个条件
     a. 对象类型相同(可以使用instanceof操作符进行比较).
     b. 两个对象成员变量的值完全相同.
class User{ String name; int    age;  public boolean equals(Object obj){ if(this == obj){ return true; }  boolean b = obj instanceof User;   //判断obj是不是User类型 if(b){ User u = (User)obj;       //obj向下转型为User类型 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));//User u3 = u1;//boolean b1 = u1 == u2;//boolean b2 = u1 == u3;//System.out.println(b1);//System.out.println(b2); //boolean b1 = u1.equals(u2); //System.out.println(b1);}}
this.name.equals(u.name)     这里的equals 是用name来调用的,name是String类型的。这里不再用‘==’ 是因为String是引用数据类型,而‘==’的作用是判断两个引用是否指向堆内存中的同一块地址,不是不需要指向同一块地址,只要内容是相同就可以。
所以,比较基本数据类型的成员变量用‘==’,比较引用类型的成员变量用equals .

第45集 java当中的hashCode()与toString()
hashCode() 与 toString()   同equals 方法一样,都被包含在object中.
1.   什么是hash算法. 
    任意长度数据 =====>(hash算法)====>散列值(固定长度)
简单说就是:输入一个任意长度的二进制数据,经过hash算法之后,得到一个固定长度唯一的散列。
哪怕是输入就变一个字节,得到的散列也大相径庭。而同一个输入,无论算多少遍,得到的都是相同的。
2. hash算法的特点
   输入1  ===============>>散列值1
   输入2  ===============>>散列值2
   输入3  ===============>>散列值3
可以在输入值与散列值建立起一个对应关系,用于存贮数据。
可以把它理解为住宅的门牌号,这样通过散列值可以方便的找到输入值。
如果两个对象用 equals  方法比较为true,那么这两个对象分别调用 hashCode 方法,得到的值应该也是一样的。
 所有的类都拥有hashCode()方法.都是object里面的.
   hascCode()广泛用于类型框架.
代码:
class User{     String name;     int    age;          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;        }     }          public int hashCode(){        int result = 17;        result  = 31*result + age;        result  = 31*result + name.hashCode();                return result;    }        public String toString(){        String result = "";        result = result + "age:" +age +"," +"name:"+name;        return result;    }   }//***************************************************************************//import java.util.*;class Test{    public static void main(String args[]){        User u = new User("zhangsan",20);                //HashMap<User,String> map = new HashMap<User,String>();        //map.put(u,"abc");        //String s = map.get(new User("zhangsan",12));        //System.out.println(s);                System.out.println(u);    }    }
User u = new User("zhangsan",20);     
 System.out.println(u);                       它会去执行user的toString方法。
0 0
原创粉丝点击