码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-12-19 01:43:52      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:body   重写   gpo   pre   ati   instance   als   div   post   

 

 

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对象的比较

标签:body   重写   gpo   pre   ati   instance   als   div   post   

原文地址:http://www.cnblogs.com/Allen-win/p/8059019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!