一.问题引导
今天写代码的过程中遇到了比较两个Long类型的数值是否相等的问题,明明两个值是相等的,但我用==比较的时候却不相等。了解==与equals()方法的区别以及重写equals()方法的类,解决问题。
二.知识点
1."==" 的作用是:基本数据类型==比较的是值;引用数据类型==比较的是内存地址,判断两个对象是不是同一个对象。
2.equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
(1)类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
(2)类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
备注:常用的覆盖equals()方法的类有Vector,Pair,List,HashMap,Collection,Enum,Set,Boolean,Date,Integer等。
三.问题结论
Long类型是引用类型,且没用重写equals()方法,所有默认比较的是内存地址。我比较的两个Long类型虽然值相等,但内存地址不是同一个,所以使用==比较结果不相等。
四.解决方法
把引用类型Long转换为基本类型long进行比较即可。(理解==与equals()方法在JAVA中的源码!!!)