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 26 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
Java实现多文件上传功能
Jun 30 Java/Android
分析ZooKeeper分布式锁的实现
Jun 30 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
java泛型通配符详解
Jul 25 Java/Android
dubbo服务整合zipkin详解
Jul 26 Java/Android
Spring Boot配合PageHelper优化大表查询数据分页
Apr 20 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
Jun 21 Java/Android
Spring Cloud OAuth2实现自定义token返回格式
Jun 25 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
app场景下uniapp的扫码记录
Jul 23 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开源建站平台小结
2010/04/22 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
JS实现三个层重叠点击互相切换的方法
2015/10/06 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
websocket+node.js实现实时聊天系统问题咨询
2017/05/17 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
python不带重复的全排列代码
2013/08/13 Python
python使用cookie库操保存cookie详解
2014/03/03 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
python3实现随机数
2018/06/25 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
django的settings中设置中文支持的实现
2019/04/28 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Python双链表原理与实现方法详解
2020/02/22 Python
python 实现超级玛丽游戏
2020/11/25 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
一套C++笔试题面试题
2012/06/06 面试题
推普周活动总结
2014/08/28 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
Redis实战高并发之扣减库存项目
2022/04/14 Redis