黑马程序员技术交流社区

标题: 关于重写equals的问题 [打印本页]

作者: 瓶中人    时间: 2013-10-21 01:18
标题: 关于重写equals的问题
class Cat
{
        private String name;
        private int age;
        private double weight;
        private Color color;
        public Cat(String name , int age , double weight , Color color){
            this.name = name;
                this.age = age;
                this.weight = weight;
                this.color = color;
        }
        public boolean equals(Object obj){
            if(this == obj){
                   return true;
                }
                if(obj == null){
                   return false;
                }
                if(this.getClass() != obj.getClass()){
                   return false;
                }
                Cat cat = (Cat)obj;
                return name.equals(cat.name)&&(age == cat.age)&&(weight == cat.weight) && (color.equals(cat.color));
        }
最后的那段代码的equals()与重写后的equals()有什么关系!是不是重写的那个是专门给对象作比较的?还有
this.getClass()有没有this貌似都差不多,为什么呢?
作者: 未知数|X|    时间: 2013-10-21 06:49
本帖最后由 未知数|X| 于 2013-10-21 06:51 编辑

所谓重写就是函数名一样接收参数一样并在里面重写自己内容分,你的这个equals本身就是重写后的方法 ,this是隐身指针,函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,也就是说在没有同名情况下,this关键字是隐身存在的可以省略,所以this.getClass()可以省略掉,就像:
private  String name="张三";//在没有同名的情况下
public  void printName()
{
System.out.println(name);
System.out.println(this.name);//这个两个的输出结果是一样的
}
作者: 王飚    时间: 2013-10-21 13:40
最后这行代码
return name.equals(cat.name)&&(age == cat.age)&&(weight == cat.weight) && (color.equals(cat.color));
是用于返回equals比较后的值,equals用于比较对象是否相等,字符串的比较通常用equals方法来完成,因为每定义一个字符串,都相当于是创建了一个对象,所以,字符串的比较用equals方法,并且,要重写该方法,因为要定义自己特有的比较方式,不然其默认的比较方式是比较哈希值;
      关于this关键字的问题,在你的这个代码中,写不写this都没有区别,jvm会自动给你加上this关键字,它是指定对象位置,this是指向本类对象,但是在多线程和一些多对象传入的时候就要写this用以区分不同对象;
作者: 徐鹏跃    时间: 2013-11-17 19:42
getClass方法调用的其实就是this.getClass方法 因为在类的内部调用 所以省略的this关键字





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2