项目实战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方法

相关文章
|
2月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
52 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
72 0
|
存储 数据库
案例09-数据类型不一致导致equals判断为false
数据类型不一致导致equals判断为false
案例09-数据类型不一致导致equals判断为false
【项目实战典型案例】09.数据类型不一致导致equals判断为false
【项目实战典型案例】09.数据类型不一致导致equals判断为false
|
应用服务中间件
reloadable=“false“ 的作用
reloadable=“false“ 的作用
140 0
|
前端开发
前端项目实战56-判断result是否为空
前端项目实战56-判断result是否为空
131 0
前端项目实战56-判断result是否为空
|
前端开发 Java
【BUG日记】【JAVA】String.indexOf(x),字符串x的长度是0返回true!
【BUG日记】【JAVA】String.indexOf(x),字符串x的长度是0返回true!
246 0
【BUG日记】【JAVA】String.indexOf(x),字符串x的长度是0返回true!
|
缓存 Java vr&ar
【BUG日记】【JAVA】使用==判断两个Integer类型的值,发现if语句不起作用(正确做法:使用的判断是equals()去判断)
【BUG日记】【JAVA】使用==判断两个Integer类型的值,发现if语句不起作用(正确做法:使用的判断是equals()去判断)
213 0
|
Java 程序员
for(;;)和while(true)的区别
for(;;)和while(true)的区别
138 0
for(;;)和while(true)的区别