两个值相同的Integer对象的比较

Posted Allen101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个值相同的Integer对象的比较相关的知识,希望对你有一定的参考价值。

 

 

package com.jj.test;

import java.util.Objects;

public class ObjectEqualsTest {
    public static final Integer COUNT_NONE = 0;
    public static void main(String[] args){
        Integer a=new Integer(0);
        boolean bool = Objects.equals(a,COUNT_NONE);
        a.equals(COUNT_NONE);
        System.out.println(a==COUNT_NONE);/*1*/
        System.out.println(bool);/*2*/
        System.out.println(a.equals(COUNT_NONE));/*3*/
    }
}

运行结果:

false
true
true

1.结果的第一行是false原因为:

两个integer引用的地址不同,==比较的是引用(内存地址),所以最终结果是false。 

2.通过源码可以很清楚的看到后两个结果是true的原因:

Objects对象中equals方法的源码:

  public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }

Integer对象中重写的Object.equals()方法:

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

 

以上是关于两个值相同的Integer对象的比较的主要内容,如果未能解决你的问题,请参考以下文章

java基础+面试题

两个 integer 值判断是否相等

反射比较两个对象属性名相同值不同

如何比较相同类型的两个对象的值?

JAVA中Integer的==和equals注意

类的对象比较和值比较