黑马程序员技术交流社区
标题:
关于重写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