equals方法:
- boolean equals(Object obj),使用“程序自己的规则”去判断两个是否相等
- ==:判断两个基本变量的值是否相等
class Dog { private String DogNo; private String DogCol; public Dog() {} public Dog(String DogNo,String DogCol) { this.DogNo = DogNo; this.DogCol = DogCol; } public boolean equals(Object obj) { //自己和被比较的对象是同一个实例 if(this == obj) { return true; } //用于获取obj引用对象的类型 if(obj.getClass() == Dog.class) { Dog d2 = (Dog)obj; if(d2 != null && this.DogNo.equals(d2.DogNo)) { return true; } } return false; } } public class EqualsTest { public static void main(String[] args) { System.out.println('A' == 65.0); //true //当比较基本类型的数值时,程序不管数据类型,只比较实际值的大小 System.out.println('0' == 0.0); //false //当比较引用类型的变量(不包括包装类,因为包装类可以自动拆箱),要求被比较的两个引用变量引用同一个实例时,才会返回true EqualsTest q1 = new EqualsTest(); //在内存中开辟空间,最终会被回收 EqualsTest q2 = new EqualsTest(); //q1和q2是两个new出来的不同对象,对象的地址不同 System.out.println(q1 == q2); //false String s1 = new String("hello"); //String重写了equals方法 String s2 = new String("hello"); System.out.println(s1.equals(s2)); //true Dog d1 = new Dog(); System.out.println(d1.equals(q1)); System.out.println(d1.equals("dash")); Dog dog1 = new Dog("1234","灰色"); Dog dog2 = new Dog("1234","灰色"); System.out.println(dog1.equals(dog2)); //true } }
- 重写equals方法的标准:
- 如果当前对象和被比较对象,本身就相等,则返回true;
- 要求当前对象与被比较对象的类型相同,关键值属性也相同,则返回true
- 正常重写equals()方法应该满足的条件:
- 自反性:对任意x,x.equals(x)一定返回true;
- 对称性:对于任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true;
- 传递性:对于任意x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true;
- 一致性:对于任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用多少次x.equals(y),返回结果应该是保持一致的,要么一致true,要么一致false;
- 对于任何不适null的x,x.equals(null)
版权声明:本文为qq_38358499原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。