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 11 Java/Android
详解JAVA中的OPTIONAL
Jun 14 Java/Android
浅谈@Value和@Bean的执行顺序问题
Jun 16 Java/Android
详解java如何集成swagger组件
Jun 21 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
idea 在springboot中使用lombok插件的方法
Aug 02 Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
SpringBoot+Redis实现布隆过滤器的示例代码
Mar 17 Java/Android
Java实现经典游戏泡泡堂的示例代码
Apr 04 Java/Android
Java Spring Lifecycle的使用
May 06 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版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
JavaScript的parseInt 取整使用
2011/05/09 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
node.js实现端口转发
2016/04/14 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
Bootstrap4 gulp 配置详解
2019/01/06 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
教你安装python Django(图文)
2013/11/04 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
Numpy 多维数据数组的实现
2020/06/18 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
web页面录屏实现
2019/02/12 HTML / CSS
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
实习教师自我鉴定
2013/09/27 职场文书
主管竞聘书范文
2014/03/31 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
JavaCV实现照片马赛克效果
2022/01/22 Java/Android
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS