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中使用Filter过滤器的方法
Jun 28 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
java固定大小队列的几种实现方式详解
Jul 15 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
Java spring定时任务详解
Oct 05 Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 Java/Android
Spring Bean是如何初始化的详解
Mar 22 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
Apr 28 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
java实现面板之间切换功能
Jun 10 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 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读书笔记整理_结构语句详解
2016/07/01 PHP
PHP分享图片的生成方法
2018/04/25 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
Laravel5.1框架注册中间件的三种场景详解
2019/07/09 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
详解webpack介绍&安装&常用命令
2017/06/29 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
[50:02]完美世界DOTA2联赛PWL S2 Magma vs FTD 第三场 11.29
2020/12/03 DOTA
python分割文件的常用方法
2014/11/01 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
python之当你发现QTimer不能用时的解决方法
2019/06/21 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
python实现简单井字棋游戏
2020/03/04 Python
Django实现celery定时任务过程解析
2020/04/21 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
Python如何爬取b站热门视频并导入Excel
2020/08/10 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
英国手机壳购买网站:Case Hut
2019/04/11 全球购物
高级销售员求职信
2013/10/25 职场文书
小学新教师培训方案
2014/02/03 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
Go并发4种方法简明讲解
2022/04/06 Golang
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android