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使用httpRequest+Jsoup爬取红蓝球号码
Jul 02 Java/Android
Spring Cloud 中@FeignClient注解中的contextId属性详解
Sep 25 Java/Android
MyBatis自定义SQL拦截器示例详解
Oct 24 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
Qt数据库应用之实现图片转pdf
Jun 01 Java/Android
java实现面板之间切换功能
Jun 10 Java/Android
Java异常体系非正常停止和分类
Jun 14 Java/Android
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
Jun 21 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 Java/Android
Android移动应用开发指南之六种布局详解
Sep 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
MYSQL环境变量设置方法
2007/01/15 PHP
那些年一起学习的PHP(二)
2012/03/21 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
2013/04/07 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
json跨域调用python的方法详解
2017/01/11 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
德国二手设计师时装和复古时装跳蚤市场:Mädchenflohmarkt
2020/11/09 全球购物
团队精神演讲稿
2013/12/31 职场文书
2014年党课学习材料
2014/05/11 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技