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 相关文章推荐
浅析NIO系列之TCP
Jun 15 Java/Android
Java Dubbo框架知识点梳理
Jun 26 Java/Android
JVM的类加载器和双亲委派模式你了解吗
Mar 13 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
RestTemplate如何通过HTTP Basic Auth认证示例说明
Mar 17 Java/Android
关于Mybatis中SQL节点的深入解析
Mar 19 Java/Android
Android超详细讲解组件ScrollView的使用
Mar 31 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Java线程的6种状态与生命周期
May 11 Java/Android
Qt数据库应用之实现图片转pdf
Jun 01 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 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利用单例模式实现日志处理类库
2014/02/10 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
Javascript执行效率全面总结
2013/11/04 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python中实现的RC4算法
2015/02/14 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
Python之父谈Python的未来形式
2016/07/01 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
塔吉特百货公司官网:Target
2017/04/27 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
旅游业大学生创业计划书
2014/01/31 职场文书
小班秋游活动方案
2014/02/22 职场文书
前处理班长职位说明书
2014/03/01 职场文书
入职担保书怎么写
2014/05/12 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
golang goroutine顺序输出方式
2021/04/29 Golang