码迷,mamicode.com
首页 > 编程语言 > 详细

java:复写equals实例

时间:2014-06-12 00:16:40      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   java   http   

bubuko.com,布布扣
class User
{
    String name;
    int age;
    /*
    *比较过程思路:
    *1、两个对象指向位置相同,那么他们就相等,return后跳出函数,不再往下执行
    *2、指向位置不同,有3情况
    *a:这两对象类型相同,并且内容相同,也属于相等
    *b:类型相同,内容不同,属于不等;
    *c:类型不同,属于不等
    */
    public boolean equals(Object obj){
        //1、指向位置相同,指定同一对象
        if(this == obj){
            return true;
            }
        

        //2、指向位置不同
        //能调用这里的equals,肯定是生成了User对象的,所以this肯定是User类型
        //判断obj是不是User类型,如果是就跟this为同一类型
        boolean b =obj instanceof User;
        if(b){
            /*
            *类型相同,obj为User类型,而跟this位置不同的对象(第1步已证明)
            *obj来源可能是:
            *User obj = new User();
            *或 
            *Object obj =new Object(); //Object是 User的父类
            */

            //obj向下转型为User对象,以便一定能调用User里面的值
                User u =(User)obj;
//这里的equals是用name调用的(jdk里面String复写过的equals方法),不是当前类的equals
//基本数据类型用==比,引用数据类型用equals比 if(this.age == u.age && this.name.equals(u.name)){ return true; }else{ return false; } }else { //类型不同,不是user对象,不等 return false; } } }
bubuko.com,布布扣
bubuko.com,布布扣
class Test
{
    public static void main(String args[]){
        //测试一:同地址,相等
        User u1 = new User();
        User u2 = u1;
        u1.name="sss";
        boolean b = u1.equals(u2);
        System.out.println(b);

        //测试二:地址不同,类型、内容相同,相等
        User u3 = new User();
        User u4 = new User();
        u3.name="sss";
        u4.name="sss";
        boolean b2 = u3.equals(u4);
        System.out.println(b2);
    }
}
bubuko.com,布布扣

其他:

java:String使用equals和==比较的区别

java:复写equals实例,布布扣,bubuko.com

java:复写equals实例

标签:style   class   blog   code   java   http   

原文地址:http://www.cnblogs.com/tinyphp/p/3771989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!