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常用函数式接口总结
Jun 29 Java/Android
dubbo服务整合zipkin详解
Jul 26 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Android基于Fresco实现圆角和圆形图片
Apr 01 Java/Android
springboot入门 之profile设置方式
Apr 04 Java/Android
Java Spring Boot 正确读取配置文件中的属性的值
Apr 20 Java/Android
SpringBoot 集成短信和邮件 以阿里云短信服务为例
Apr 22 Java/Android
Java时间工具类Date的常用处理方法
May 25 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
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
JavaScript函数参数使用带参数名的方式赋值传入的方法
2015/03/19 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
详解vue-cli快速构建vue应用并实现webpack打包
2017/12/13 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python插入数据到列表的方法
2015/04/30 Python
python去掉行尾的换行符方法
2017/01/04 Python
老生常谈Python基础之字符编码
2017/06/14 Python
Django之路由层的实现
2019/09/09 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
PHP面试题大全
2015/10/16 面试题
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
统计岗位职责
2014/02/21 职场文书
教师自我鉴定范文
2014/03/20 职场文书
主管竞聘书范文
2014/03/31 职场文书
班级旅游计划书
2014/05/03 职场文书
数学复习课教学反思
2016/02/18 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL