基本数据类型
和equals()都是直接比较具体的数值
==
int a =1;
int b = 2;
if (a == b){
System.out.println("两者相等");
}else{
System.out.println("两者不相等");
}
结果:两者不相等
equals()
未重写的equals方法本质上跟==一样,下列代码是该方法的api。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
可以看的出来,假如是基本数据类型,那么比较的就是数值,就是用==来进行比较的。
引用数据类型
==和未重写的equals()比较的是内存地址是否相同
equals()方法可以被重写
重写好的equals()比较的是equals()方法中的结果是否相等。
==
Book book1 = new Book("2","树",12);
Book book2 = new Book("1","树",12);
if (book1 == book2){
System.out.println(true);
}else {
System.out.println(false);
}
结果:false
equals()
Book book1 = new Book("2","树",12);
Book book2 = new Book("1","树",12);
if (book1.equals(book2)){
System.out.println(true);
}else {
System.out.println(false);
}
结果:false
重写后的equals()
Book book1 = new Book("2","树",12);
Book book2 = new Book("1","树",12);
if (book1.equals(book2)){
System.out.println(true);
}else {
System.out.println(false);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Book book = (Book) o;
return price == book.price &&
Objects.equals(bookName, book.bookName);
}
结果:true