packagejava.lang;
publicclassObject {
// ...其他方法省略
publicbooleanequals(Object obj) {
return(this== obj);
}
}
分析上面的代码,可以发现Object类中equals()方法同样判断两个对象的引用是否指向同一个对象。即默认情况下,"=="与equals()方法判断两个对象是否相等使用同一个原则。
由于equals()方法从Object类继承,所以可以在当前的Java类中重写这个方法,以改变判断两个对象是否相等的原则,示例代码如下:publicbooleanequals(Object obj) {
if(this== obj)
returntrue;
if(obj ==null)
returnfalse;
if(getClass() != obj.getClass())
returnfalse;
UserId other = (UserId) obj;
if(birthDate ==null) {
if(other.birthDate !=null)
returnfalse;
}elseif(!birthDate.equals(other.birthDate))
returnfalse;
if(username ==null) {
if(other.username !=null)
returnfalse;
}elseif(!username.equals(other.username))
returnfalse;
returntrue;
}
上面代码来自于SRC 3 2 User.java类,重写了继承自Object类的equals()方法,改变了判断两个对象是否相等的原则。即通过判断两个User对象中的username和birthDate属性值是否相等,进而判断两个User对象是否相等。如果两个User对象的这两个属性值相等,则调用equals()方法,返回值为true,示例代码如下:001User user1 =newUser();
002user1.setUsername("liuwei");
003user1.setBirthDate("1970-11-25");
004
005User user2 =newUser();
006user2.setUsername("liuwei");
007user2.setBirthDate("1970-11-25");
008
009System.out.println(user1.equals(user2));
执行上面的代码后第009行会输出true。
在Java中,String、Date和基本类型的封装类(Integer、Double及Boolean等)也类似于SRC 3 2 User.java类。它们重写了equals(),改变了判断这些类型对象相等的原则,即判断对象是否相等依据的原则为判断二者的内容是否相等,示例代码如下:001String s1 =newString("liuwei");
002String s2 =newString("liuwei");
003System.out.println(s1.equals(s2));
004
005Integer i=newInteger(1000);
006Integer j=newInteger(1000);
007System.out.println(i.equals(j));
执行上面的代码后第003行和第007行会输出true。
【责任编辑:董书 TEL:(010)68476606】