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 18 Java/Android
死磕 java同步系列之synchronized解析
Jun 28 Java/Android
SpringBoot+VUE实现数据表格的实战
Aug 02 Java/Android
浅谈spring boot使用thymeleaf版本的问题
Aug 04 Java/Android
mybatis中注解与xml配置的对应关系和对比分析
Aug 04 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
聊聊Lombok中的@Builder注解使用教程
Nov 17 Java/Android
Java 超详细讲解ThreadLocal类的使用
Apr 07 Java/Android
Spring Boot 实现 WebSocket
Apr 30 Java/Android
Spring Boot项目如何优雅实现Excel导入与导出功能
Jun 10 Java/Android
Java多线程并发FutureTask使用详解
Jun 28 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 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+mysql写的留言本
2006/10/09 PHP
PHP操作数组的一些函数整理介绍
2011/07/17 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
php验证码生成器
2017/05/24 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
javascript实现yield的方法
2013/11/06 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
基于zepto.js实现登录界面
2017/10/09 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
《javascript少儿编程》location术语总结
2018/05/27 Javascript
单页面vue引入百度统计的使用方法示例详解
2018/10/13 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
在python中bool函数的取值方法
2018/11/01 Python
pycharm新建一个python工程步骤
2019/07/16 Python
简单了解Pandas缺失值处理方法
2019/11/16 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
写给老师的表扬信
2014/01/21 职场文书
军训自我鉴定
2014/01/22 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
小学运动会报道稿
2014/10/04 职场文书
人民调解协议书范本
2014/10/11 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书