1. 程式人生 > >兩個值相同的Integer對象的比較

兩個值相同的Integer對象的比較

void tro turn test import div 重寫 log clas

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對象的比較