注意重写类的equals()方法
注意在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()方法的更多相关文章
- List中的Contains方法内部其实是用对象的equals方法做比较,所以如果比较两个类就重写类的equals方法即可;而Set是调用equals和hashCode
		
public class Person { private String name; private int age; public String getName() { return name; } ...
 - 重写类的Equals以及重写Linq下的Distinct方法
		
当自定义一个类的时候,如果需要用到对比的功能,可以自己重写Equals方法,最整洁的方法是重写GetHashCode()方法. 但是,这个方法只适用于对象自身的对比(如if(a==b))以及字典下的C ...
 - object类的equals方法简介 & String类重写equals方法
		
object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...
 - HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法
		
之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中, ...
 - 为什么要重写 hashcode 和 equals 方法?
		
引言 以前面试的时候被面试官问到过这样一个问题: 你有没有重写过 hashCode 方法? 心里想着我没事重写哪玩意干啥,能不写就不写.嘴上当然没敢这么说,只能略表遗憾的说抱歉,我没写过. 撇了面试官 ...
 - 为什么要重写hashcode和equals方法?初级程序员在面试中很少能说清楚。
		
我在面试 Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分, ...
 - Java Object类及其equals方法
		
基本概念: Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: Object类是所有Java类的祖先.每个类都使用 Object 作为超 ...
 - (转)为什么要重写 hashcode 和 equals 方法?
		
作者丨hsm_computer cnblogs.com/JavaArchitect/p/10474448.html 我在面试Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候 ...
 - Object 类的equals方法
		
Object 类中定义有: public boolean equals (Object obj)方法 提供对象是否“相等”的逻辑 Object 的equals方法定义为:x.equals(y)当x和y ...
 
随机推荐
- RS232与RS485
			
1.RS232实物图与引脚图? 2.RS485实物图与引脚图?
 - ES-9200端口与9300端口
			
(1)Elasticsearch是基于lucene的全文检索服务器 (1)9300:ES节点之间的通讯使用 (2)9200:ES节点和外部通讯使用
 - c语言中的qsort用法
			
1.首先了解 int cmp(const void* a, const void* b) 表示声明cmp函数,其返回值为int型,参数为两个不可修改(const)的void型指针 2.函数原型 函数声 ...
 - 电源适配器DC插头规格
			
电源适配器 DC 插头的内径外径规格有 (单位为 MM) :2.0*0.72.35*0.72.35*1.12.5*0.73.5*1.13.5*1.354.0*1.75.5*2.15.5*2.54.75 ...
 - echarts做飞线图
			
先上图,要不感觉没有说服力: 飞线图应该是大屏中很常见的一种了,通常你可以很轻易的用datav做一个飞线图,而且datav做的大屏逼格真的很高,本身也是开源免费的项目,开箱即用,上手简单……行了回归正 ...
 - Mockito 中文文档 ( 2.0.26 beta )
			
Mockito 中文文档 ( 2.0.26 beta ) 由于缺乏校对,难免有谬误之处,如果发现任何语句不通顺.翻译错误,都可以在github中的项目提出issue.谢谢~ Mockito框架官方地址 ...
 - 改写画质、突破性能, Unity 全面升级!
			
技术变革,时代更迭.从<神庙逃亡>.<暗影之枪>等主流手游到独立联网的大型游戏,从绚丽多彩的影视动画到具备极致体验的运输建筑制造行业,从传统的2D 到立体3D 乃至沉浸式的VR ...
 - 3分钟让你的Eclipse拥有自动代码提示功能
			
第一步:Window->Preferences->Java 第二步:Java->Editor->Content Assist->Auto Activation->将 ...
 - vmware fusion nat网络模式设置固定ip
			
最近想在本地用虚拟环境搭一个k8s环境,但是发现虚拟机的ip会不定时自动变化,导致mosh客户端连接经常中断.于是就想让虚拟机的ip固定住,不再变动. mac 上的 vmware fusion 设置固 ...
 - 前端面试:js数据类型
			
js数据类型是js中的基础知识点,也是前端面试中一定会被考察的内容.本文旨在知识的梳理和总结,希望读者通过阅读本文,能够对这一块知识有更清晰的认识.文中如果出现错误,请在评论区指出,谢谢. js数据类 ...