Java的Integer类型使用==与equals

来源:互联网 发布:php 环境 编辑:程序博客网 时间:2024/06/06 19:59

或许有不少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()转换了!

 

内容很简单,知识很基础!

1 0
原创粉丝点击