java中关于==与equals方法不同及equals覆写

原创 2015年11月17日 16:27:50

首先,我们需要明确,==比较的是两个对象的地址,基本类型全部可用==比较(比较的是基本类型元素的值),可是除了基本类型之外的引用类型,如String,因不可比较地址,但其equals方法覆写了,所以可用作比较值。只有覆写了equals方法的才可以比较值,否则都是比较地址(由Object类中的equals得到)。

在关于集合的删除,查询中,一般需要覆写equals方法,因为如不覆写,则不知道通过什么来比较。

public class Book {
private int num;
private String name;
public Book(int num, String name) {
super();
this.num = num;
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Book [num=" + num + ", name=" + name + "]";
}

@Override
public boolean equals(Object obj) {                   //==比较的是地址,equals比较的是值
if(this==obj){       
return true;
}
if(obj==null){
return false;
}
if(!(obj instanceof Book)){
return false;
}
Book book=(Book)obj;
if(this.num==book.num&&this.name.equals(book.name)){
return true;
}
return false;
}
}


public class test {


public static void main(String[] args) {
Book b1=new Book(20, "java开发");
Book b2=new Book(20, "java开发");

System.out.println(b1.equals(b2));
}
}

equals方法的覆写可有编译器自动生成,理解原理即可。

覆写equals方法必须覆写hashCode方法

覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先...
  • lexang1
  • lexang1
  • 2015年10月29日 22:58
  • 781

覆写equals方法

我们在写java类时,经常会覆写equals()方法,目的是根据业务判断两个对象是否相等。比如...
  • u013038643
  • u013038643
  • 2016年07月31日 21:41
  • 605

Java基础回顾:覆写equals()方法

覆写equals()方法需要注意的问题: ├ . 不能与一个null值进行比较,否则会报NullPointerException异常 ├ . 类型不同时,不能进行比较,否则会报ClassCastE...
  • sinat_18882775
  • sinat_18882775
  • 2016年05月23日 15:36
  • 908

如何覆写java中的equals和hashcode方法

Equals 和 hashCode是java中一个对象的两个基本方法和core java的重要组成部分。Equals用来比较对象的相等性,hashcode用来生成相应对象的整数形编码。Equals ...
  • SKY__LAND
  • SKY__LAND
  • 2013年11月21日 12:14
  • 2379

Java中HashSet要重写equals方法和hashCode方法

Java编程使用HashSet添加对象时,由于要符合Set的特点(没顺序,不重复)所以必须重写equals方法和hashCode方法。为什么要这样呢?请看:Java中关于HashSet添加自定义对象时...
  • lb_383691051
  • lb_383691051
  • 2015年08月08日 09:32
  • 1468

java中 equals()方法 与 “==”的区别

摘要java语言的 equals() 方法 与 “==” 的区别,是每个初学者都会遇到过的问题。之前自己也很清楚,可日子一长,又渐渐遗忘,于是整理出一篇博客,复习一下。...
  • echosilly
  • echosilly
  • 2016年06月26日 18:04
  • 2815

Java中==号与equals()方法的区别

==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢? 首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:int x = 10; ...
  • StriverLi
  • StriverLi
  • 2016年11月01日 17:29
  • 2306

java学习之:复写equals方法

@Override     public boolean equals(Object obj) { 1.首先比较传入的对象是否就是this对象  if(this==obj) 2.判断obj是...
  • qq_26523933
  • qq_26523933
  • 2017年04月18日 20:42
  • 262

为什么实现Comparator接口不用重载其中的equals方法 ?

因为Object里面有个默认的equals实现。
  • a735465047
  • a735465047
  • 2014年11月10日 20:36
  • 396

HashMap中的equals和hashCode

Java的Object对象有9个方法,其中的equals()和hashCode()在hashMap的实现里面起着比较重要的作用,我在研究hashMap的源码时就遇到了它们俩,此篇博文主要是为了记录它们...
  • qiuych3
  • qiuych3
  • 2016年05月06日 21:26
  • 1490
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中关于==与equals方法不同及equals覆写
举报原因:
原因补充:

(最多只允许输入30个字)