项目实战09—数据类型不一致导致equals判断为false

简介: 项目实战09—数据类型不一致导致equals判断为false

一.问题背景

在这里发现了问题是,左边long类型,右边string类型,值相同,但是用equals()判断不相等,类型不匹配返回false的问题。

二.问题复现 这里通过一个demo复现问题来进行验证

定义了Long类型的first,和String类型的second和third

package com.equals;
public class DifferentType {
    public static void main(String[] args){
        Long first=555L;
        String second="555";
        String third="555";
        System.out.println("类型判断不一致"+first.equals(second));
        System.out.println("类型判断一致"+second.equals(third));
    }
}

结果如图,复现了问题,String和Long类型不同,则equals()判断返回false

三.问题分析

Ctrl+双击equals,查看equals源码

instanceof 是 Java 的保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型

原理:包装类重写了equals方法,在equals方法中判断传入的对象是不是包装类的实例(instanceof),如果不是的话就返回false,这是本问题的原因所在

equals如果没有进行重写操作,比较的是两个对象的地址,如果重写,那么按照重写方法内的逻辑进行判断。所以如果不重写的话,所有的String类型比较都是相等的。因此包装类类型都重写了equals方法

相关文章
|
6月前
|
Java 开发者
使用HashMap的values()方法返回的值转换为List时遇到错误
使用HashMap的values()方法返回的值转换为List时遇到错误
|
10天前
如何判断`instanceof`操作符的返回值是否为`true`
`instanceof`操作符用于判断一个对象是否是指定类型或其子类型的实例。如果对象是指定类型的实例,则返回`true`,否则返回`false`。例如:`if (obj instanceof MyClass)` 会检查 `obj` 是否是 `MyClass` 类或其子类的实例。
|
1月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
21 1
TS定义布尔值,let flag:boolean = true,定义数字类型 let a1:number = 10,赋值 let str1:string = ‘‘,打印c~.log($(str1))
TS定义布尔值,let flag:boolean = true,定义数字类型 let a1:number = 10,赋值 let str1:string = ‘‘,打印c~.log($(str1))
项目实战典型案例9——数据类型不一致导致equals判断为false
项目实战典型案例9——数据类型不一致导致equals判断为false
68 0
|
存储 数据库
案例09-数据类型不一致导致equals判断为false
数据类型不一致导致equals判断为false
案例09-数据类型不一致导致equals判断为false
【项目实战典型案例】09.数据类型不一致导致equals判断为false
【项目实战典型案例】09.数据类型不一致导致equals判断为false
|
前端开发
前端项目实战56-判断result是否为空
前端项目实战56-判断result是否为空
127 0
前端项目实战56-判断result是否为空
|
存储 缓存 算法
Java 中基于各种数据类型分析 == 和 equals 的区别
Java 中基于各种数据类型分析 == 和 equals 的区别
86 0
Java 中基于各种数据类型分析 == 和 equals 的区别
|
缓存 Java vr&ar
【BUG日记】【JAVA】使用==判断两个Integer类型的值,发现if语句不起作用(正确做法:使用的判断是equals()去判断)
【BUG日记】【JAVA】使用==判断两个Integer类型的值,发现if语句不起作用(正确做法:使用的判断是equals()去判断)
208 0