一.问题背景
在这里发现了问题是,左边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方法。