【项目实战典型案例】09.数据类型不一致导致equals判断为false

简介: 【项目实战典型案例】09.数据类型不一致导致equals判断为false

一:背景介绍

在判断课程id和班级id的时候,如果类型一致就会更新课程信息,如果类型不一致就会插入一条新的数据。其实两个变量的值是一致的,只不过数据类型不一致,从而导致了,在判断的时候结果为false,就会往库中插入一条相同课程班级的数据。结果数据发生了混乱的情况。

二:分析equals()方法

Object类中的equals()方法用于检测一个对象是否等于另外一个对象

equals()语法

public boolean equals(Object obj) {
        return (this == obj);
    }

在Object类中,equals方法判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,则返回true,否则返回false。

equals()重写规则

  1. 自反性:对于任何非空引用x,x.equals(x)应该返回true
  2. 对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true
  3. 传递性:对于任何引用 x、y 和 z ,如果 x.equals(y) 返回 true,y.equals(z)返回true, x.equals(z) 也应该返回 true。
  4. 一致性:对于任何引用 x、y 和 z ,如果 x.equals(y) 返回 true,y.equals(z)返回true, x.equals(z) 也应该返回 true。
  5. 非空性:对于任意非空引用x,x.equals(null)应该返回false。

String类对equals重写

Java instanceof用法详解

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

三:验证equals()方法过程

package com.wangsiqi.equals;
/**
 * @BelongsProject: 反射的使用
 * @BelongsPackage: com.wangsiqi.equals
 * @Author: wangsiqi
 * @Description: 数据类型不一致导致equals判断为false
 * @CreateTime: 2023-03-16 14:21
 * @Version: 1.0
 */
public class DataType {
    public static void main(String[] args) {
        Long one = 123L;
        String two = "123";
        String three = "123";
        System.out.println("类型不一致" + one.equals(two));
        System.out.println("类型一致" + two.equals(three));
    }
}

从执行结果来看,类型不一致会导致调用equals方法为false

四:总结

  1. equals方法不能作用于基本数据类型的变量
  2. 如果没有对Object中equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址,反之则比较的是内容


相关文章
|
JavaScript Dubbo Java
还用 if(obj!=null) 做非空判断?带你快速上手 Optional 实战性理解
1.前言 2.认识Optional并使用 3.实战场景再现 4.Optional使用注意事项 5.jdk1.9对Optional优化
|
3月前
|
Java
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
项目实战典型案例9——数据类型不一致导致equals判断为false
项目实战典型案例9——数据类型不一致导致equals判断为false
70 0
关于==和equals的区别和联系,面试这么回答就可以
关于==和equals的区别和联系,面试这么回答就可以
|
存储 数据库
案例09-数据类型不一致导致equals判断为false
数据类型不一致导致equals判断为false
案例09-数据类型不一致导致equals判断为false
|
Java
项目实战09—数据类型不一致导致equals判断为false
项目实战09—数据类型不一致导致equals判断为false
98 0
|
前端开发
前端学习案例1-empty和undefined区别
前端学习案例1-empty和undefined区别
85 0
前端学习案例1-empty和undefined区别
|
前端开发
前端学习案例5-对象的迭代和map和set2
前端学习案例5-对象的迭代和map和set2
53 0
前端学习案例5-对象的迭代和map和set2
|
前端开发
前端项目实战56-判断result是否为空
前端项目实战56-判断result是否为空
127 0
前端项目实战56-判断result是否为空
|
小程序 编译器 C++
C++菜鸟学习笔记系列(19)——返回类型和return语句
C++菜鸟学习笔记系列(19)——返回类型和return语句
245 0