兩個值相同的Integer對象的比較
阿新 • • 發佈:2017-12-18
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對象的比較