您的位置:首页 > 其它

关于equals的一些看法

2015-10-26 22:58 302 查看
最近碰到==和equals的一些问题,于是就是查找了下API并进行了测试,得出以下一些结论:

第一只有引用类型的数据才能使用equals()方法。如果是基本数据类型想int char 等这些用变量去调用equals()方法的话会提示cannot invoke不能调用的报错;

第二equals()方法是继承Object类的,这个类如果没有被重写的话比较的是俩个对象的内存地址。如下面

Age d=new Age(10);

Age c=new Age(10)

这个输出是false

当然我个人觉得equals()方法主要还是要用来比较对象存储的内容而不是地址,因为如果是要比较对象的地址的话,那么直接只用if(d==c)就可以了,没必要那么麻烦。

第三,如果要比较对象的值的话,那么我们应该做的是重写equals()的方法,具体如下

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Age other = (Age) obj;

if (age != other.age)

return false;

return true;

}

首先咋看之下以为第一个是比较地址,其实第一个是通过比较地址来间接比较值的,毋庸置疑,如果地址是一样的话,那么值也是一样的。还有一点也能说明为什么是比较值而不是地址,那就是第一个判断只有返回true而没有返回false。因为如果是false的话那么说明地址是不同的,但是地址不同并不能说值不同,所以没有写返回false也说明了第一个是通过比较地址来间接比较值的,而不是只是简单的比较地址。

至于第二个if判断,如果参数是null的话,那么自然它就没有值,那么也就不用比较了。所以返回的是false

再看第三个判断比较的是引用类型是否相同,如果引用的数据类型不同。即使是值相同也不能进行比较,请看下面例子

String[] x=new String[]{"abc"};

String s="abc";

System.out.println(s.equals(x));

这个虽然值相同,但是数据类型不同,所以输出false

最后看第四个则是判断俩个已经是相同类型的对象的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: