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

相关文章
|
1月前
如何判断`instanceof`操作符的返回值是否为`true`
`instanceof`操作符用于判断一个对象是否是指定类型或其子类型的实例。如果对象是指定类型的实例,则返回`true`,否则返回`false`。例如:`if (obj instanceof MyClass)` 会检查 `obj` 是否是 `MyClass` 类或其子类的实例。
61 3
|
2月前
|
C# 开发者
【捞底干货】C#中equals和==运算符的区别
【捞底干货】C#中equals和==运算符的区别
65 1
项目实战典型案例9——数据类型不一致导致equals判断为false
项目实战典型案例9——数据类型不一致导致equals判断为false
73 0
|
存储 数据库
案例09-数据类型不一致导致equals判断为false
数据类型不一致导致equals判断为false
案例09-数据类型不一致导致equals判断为false
|
JavaScript 前端开发 Java
为什么使用typeof判断数据类型的时候null出来是object?
为什么使用typeof判断数据类型的时候null出来是object?
【项目实战典型案例】09.数据类型不一致导致equals判断为false
【项目实战典型案例】09.数据类型不一致导致equals判断为false
|
前端开发
前端项目实战56-判断result是否为空
前端项目实战56-判断result是否为空
134 0
前端项目实战56-判断result是否为空
|
存储
==与equals方法的区别
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量的引用地址是否相等,只能用==操作符。
133 0
|
小程序 编译器 C++
C++菜鸟学习笔记系列(19)——返回类型和return语句
C++菜鸟学习笔记系列(19)——返回类型和return语句
251 0
|
JavaScript 数据安全/隐私保护 前端开发
js中return,return true,return false三者的用法及区别
return其实就是return undefined; 1.语法及返回方式 ①返回控制与函数结果         语法为:return 表达式;         语句结果函数的执行,返回调用函数,而且把表达式的值作为函数结果返回出去 ②返回控制无函数结果         语法为:return;         在大多数情况下,为事件处理函数如果让其返回false,可以防止默认的事件行为.
1649 0
下一篇
DataWorks