Java详细解析==和equals的区别


Posted in Java/Android onApril 07, 2022

1、== 解析

== 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较;

  • 如果 == 比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等;
  • 如果 == 是比较的两个对象,那么比较的是两个对象的引用,那么就是比较两个对象的引用是否相等,也就是判断两个对象是否指向了同一块内存区域;

2、equals 方法解析

equals 方法主要用于两个对象之间,检测一个对象是否等于另一个对象。

我们来看一看 Object 类中的 equals 方法的源码

public boolean equals(Object obj) {
     return (this == obj);
 }

它的作用也是判断两个对象是否相等,一般有两种使用情况:

情况一:对象的 equals 方法没有被重写,那么 equals 被调用时比较的是两个对象的引用是否相等,也就是两个对象是否指向了同一片内存区域。此时,其等价于 == 比较两个对象。

Dog类

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

测试类

import com.xiao.Dog;

public class Test {

    public static void main(String[] args) {
        Dog dog = new Dog("小旺",2);
        Dog dog1 = new Dog("小旺",2);
        System.out.println(dog.equals(dog1));
    }
}

测试结果

false

情况二:对象的 equals 方法被重写了。一般,我们进行重写后的 equals 方法比较的是两个对象的内容是否相等。如果相等的话,那么返回 true ,否则返回 false

Dog类

package com.xiao;

/**
 * @author :小肖
 * @date :Created in 2022/3/11 14:42
 */
public class Dog {

    private String name;

    private Integer age;


    public Dog() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Dog(String name, Integer age) {
        this.name = name;
        this.age = age;
    }


    @Override
    public boolean equals(Object obj) {
        if(obj.getClass() != getClass()){
            return false;
        }
        Dog dog = (Dog) obj;
        if(dog.getAge() == age && dog.getName().equals(name)){
            return true;
        }
        return false;
    }
}

测试结果

测试类代码和上面的一样

true

3、equals方法具有以下特性

  • 自反性:对于任意不为 null 的引用值 x ,x.equals(x) 一定是 true。
  • 对称性:对于任意不为 null 的引用值 x 和 y ,当且仅当 x.equals(y) 是 true 时,y.equals(x) 也是 true 。
  • 传递性:对于任意不为 null 的引用值 x 、y 和 z ,如果 x.equals(y) 是 true ,同时 y.equals(z) 是 true,那么x.equals(z) 一定是 true 。
  • 一致性:对于任意不为 null 的引用值 x 和 y ,如果用于 equals 比较的对象信息没有被修改的话,多次调用时x.equals(y) 要么一致地返回 true 要么一致地返回 false 。
  • 对于任意不为 null 的引用值 x,x.equals(null) 返回 false 。

到此这篇关于Java详细解析==和equals的区别的文章就介绍到这了,更多相关Java ==和equals内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
一篇带你入门Java垃圾回收器
Jun 16 Java/Android
Jackson 反序列化时实现大小写不敏感设置
Jun 29 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
Java 在生活中的 10 大应用
Nov 02 Java/Android
Jpa Specification如何实现and和or同时使用查询
Nov 23 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
零基础学java之带参数以及返回值的方法
Apr 10 Java/Android
Java的Object类的九种方法
Apr 13 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Java Spring读取和存储详细操作
Aug 05 Java/Android
Java 超详细讲解hashCode方法
Apr 07 #Java/Android
Java 关于String字符串原理上的问题
Apr 07 #Java/Android
Java虚拟机内存结构及编码实战分享
Java Lambda表达式常用的函数式接口
Apr 07 #Java/Android
Android Rxjava3 使用场景详解
Apr 07 #Java/Android
Java GUI编程菜单组件实例详解
Flutter集成高德地图并添加自定义Maker的实践
Apr 07 #Java/Android
You might like
坏狼的PHP学习教程之第2天
2008/06/15 PHP
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
python中global与nonlocal比较
2014/11/21 Python
python实现用户登录系统
2016/05/21 Python
python数据结构之链表详解
2017/09/12 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
pandas-resample按时间聚合实例
2019/12/27 Python
如何对python的字典进行排序
2020/06/19 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
成人大专生实习期的自我评价
2013/10/02 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
门店业绩提升方案
2014/06/08 职场文书
音乐兴趣小组活动总结
2014/07/07 职场文书
公民代理授权委托书
2014/09/24 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书