或许有不少Java程序猿在写Integer比较的时候出现过一种情况,均为Integer类型的相同值比较,却不是我们想要的结果!刚好在今天在开发中赶进度,也犯了这么一个错,所以来整理分享一下!
刚好今天有这么一个比较:
device.getIdevicetypeid != dbDevice.getIdevicetypeid()
在测试的时候就一直有问题,逼得我来个debug,一只跟踪到这里发现原本类型一致、值也一致的两个属性值比较时,却永远是true,很是诧异,仔细看看才发现"!="这个比较!
在这个时候,作为一个有了几年开发经验的来说,马上会想到几种解决方案!先例举两种:
1、不改比较方式,还是使用"!=",但是将
device.getIdevicetypeid().intValue != dbDevice.getIdevicetypeid().intValue()
这样就会得到你想要的答案
2、改变比较方式,使用"equals()",代码如下:
!device.getIdevicetypeid().equals(dbDevice.getIdevicetypeid())
这种比较方式一样能比较出来!以上两种比较方式要注意java.lang.NullPointerException异常,至于怎么处理这个异常,我就不多说了!
说说为什么吧,Integer不属于基本数据类型,使用==只能比较值相等,而Integer为对象所以使用==比较时就会出现问题,只要使用equals比较就不会有这种问题出现。再说说为什么用上面的两种方式就能比较出来呢,有使用jdk API习惯的程序猿,会发现Integer对象的intValue()会把Integer对象的值转换为int的基本数据类型值,这样使用==比较就是正常的!而用equals比较在底层的逻辑也就是将它用intValue()转换了!
内容很简单,知识很基础!