注意在java中在比较引用类型时==和原生的equals()方法比较的都是看它们否是同一个对象(说的更直白一点就是他们在内存的位置是否是一样的),但我们在真实世界中关注的往往只是其中的某个属性是否相等,如果某个属性相等我们就认为他们是相等的,所以我们需要在自己定义的类中重写equals()方法。

当然基本类型用==比较是否相等还是不会存在甚麽问题了

注意:在String和Intrger中都已经重写过了,所以可以直接用equals()进行比较

public class Citizen {//公民类
private String id;
public Citizen(String theId){
id=theId;
} /*
* 覆盖父类(Object)的equals()方法
* 因为在真实世界中我们只是关心“公民”是不是相同,而不关心他们在内存中存放的位置是不是一样
*/ public boolean equals(Object obj){ if(obj==null){
return false;
}
if(obj==this){//如果是同一个对象id一定相同
return true;
}
if(this.getClass()!=obj.getClass()){//判断所处的类是不是相同,总不能拿人和小猫看是不是同一个吧
return false;
}
Citizen c = (Citizen) obj;//将对象转化为Citizen的类型 return c.id==this.id;//返回她们的id是否相同 }
public static void main(String[] args) {
// TODO Auto-generated method stub
Citizen p1 = new Citizen("id00001");
Citizen p2 = new Citizen("id00001");
System.out.println("p1==p2: "+(p1==p2));
//如果不重写equals()方法返回的是false
System.out.println("p1.equals(p2): "+(p1.equals(p2)));
//-------------------------------------------------------------------------------------------------------
Integer t1 = new Integer();
Integer t2 = new Integer();
System.out.println(t1.equals(t2));//比较值
System.out.println(t1==t2);//比较对象
//特殊情况:在java中为了节省创建对象的时间,对于一些常用的对象会在内存中缓存下来。
//当int、short类型在-128~127或者在\u0000~\u007f的char类型的值的时候,产生的对象会会缓存在内存中,
//当试图通过自动装箱产生一个相等值的Integer的值时,系统不会生成新的对象,而是直接使用内存中已经存在的对象
t1=;
t2=;
System.out.println(t1==t2);//比较对象 } }

注意重写类的equals()方法的更多相关文章

  1. List中的Contains方法内部其实是用对象的equals方法做比较,所以如果比较两个类就重写类的equals方法即可;而Set是调用equals和hashCode

    public class Person { private String name; private int age; public String getName() { return name; } ...

  2. 重写类的Equals以及重写Linq下的Distinct方法

    当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...

  3. object类的equals方法简介 & String类重写equals方法

    object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...

  4. HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法

    之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中, ...

  5. 为什么要重写 hashcode 和 equals 方法?

    引言 以前面试的时候被面试官问到过这样一个问题: 你有没有重写过 hashCode 方法? 心里想着我没事重写哪玩意干啥,能不写就不写.嘴上当然没敢这么说,只能略表遗憾的说抱歉,我没写过. 撇了面试官 ...

  6. 为什么要重写hashcode和equals方法?初级程序员在面试中很少能说清楚。

    我在面试 Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分, ...

  7. Java Object类及其equals方法

    基本概念: Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: Object类是所有Java类的祖先.每个类都使用 Object 作为超 ...

  8. (转)为什么要重写 hashcode 和 equals 方法?

    作者丨hsm_computer cnblogs.com/JavaArchitect/p/10474448.html 我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候 ...

  9. Object 类的equals方法

    Object 类中定义有: public boolean equals (Object obj)方法 提供对象是否“相等”的逻辑 Object 的equals方法定义为:x.equals(y)当x和y ...

随机推荐

  1. DOC文档与DOCX文档有什么区别

    doc 是 Microsoft Office 2003 里的 Word 文档,而 docx 是 Microsoft Office 2007 里的 Word 文档.高版本是向下兼容的,也就是能够打开 d ...

  2. MediaCreationTool制作WIN10安装U盘,安装纯净版win10的通用教程

    注意: 1.准备8G或8G以上U盘. 2.安装系统前备份好个人需要数据(制作U盘会格式化U盘,U盘内有需要的数据也事先备份好) 3.有预装office的务必记住自己激活office账户和密码以免重装后 ...

  3. CodeForces-220B Little Elephant and Array

    小象喜欢玩数组.他有一个数组a,由n个正整数组成,从1到n进行索引.让我们用索引i表示数字ai. 此外,小象对数组还有m个查询,每个查询的特征是一对整数lj和rj(1 ≤ lj ≤ rj ≤ n).对 ...

  4. P2774 方格取数(网络流)

    https://www.luogu.com.cn/problem/P2774 在一个有 m×n 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意2个数所在方格没有公共边,且取出的数的 ...

  5. windows和ubuntu安装以太坊客户端Mist

    Mist钱包下载地址:https://github.com/ethereum/mist/releases Mist = Ethereum Wallet + Web3 浏览器 Dapp:bancor 史 ...

  6. CentOS 7控制台屏幕分辨率问题

    我们在服务器上,很少会安装图形化界面,一般都使用字符界面的控制台.CentOS 下,控制台分辨率缺省情况下,变得很高,导致在显示器上花屏或者只能显示局部. 这是由于使用了frame buffer,好处 ...

  7. jQuery结合CSS实现手风琴组件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. linux-命令行快捷方式使用

    CTRL+P 命令向上翻滚 CTRL+N  命令向下翻滚 CTRL+U 命令行中删除光标前面的所有字符 CTRL+D 命令行中删除光标后面的一个字符 CTRL+H 命令行中删除光标前面的一个字符 CT ...

  9. Style 继承

    在应用某个主题后,想在此基础上自定义新的样式,可以使用如下方式继承样式. <Style x:Key="ListViewItemStyle" TargetType=" ...

  10. springboot搭建的web数据提交乱码

    修改:application.yml或者application.properties文件 将 url: jdbc:mysql://127.0.0.1:3306/shiro 修改为: url: jdbc ...