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 相关文章推荐
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
java基础——多线程
Jul 03 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
详解JAVA的控制语句
Nov 11 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
springboot新建项目pom.xml文件第一行报错的解决
Jan 18 Java/Android
Java如何实现通过键盘输入一个数组
Feb 15 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
Java练习之潜艇小游戏的实现
Mar 16 Java/Android
Android自定义scrollview实现回弹效果
Apr 01 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
Android RecyclerView实现九宫格效果
Jun 28 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与SQL注入攻击[三]
2007/04/17 PHP
ThinkPHP3.1查询语言详解
2014/06/19 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
php实现微信公众号企业转账功能
2018/10/01 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
2016/08/05 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python struct.unpack
2008/09/06 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
python搜索指定目录的方法
2015/04/29 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python中属性和描述符的正确使用
2016/08/23 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
暑期社会实践方案
2014/02/05 职场文书
法定代表人授权委托书
2014/04/04 职场文书
司法助理专业自荐书
2014/06/13 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
2014年少先队工作总结
2014/12/03 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python