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; }
本文通过一个具体的Java示例,详细解析了equals方法的工作原理,包括基本类型与引用类型的比较区别,以及Objects类提供的equals方法如何实现对null值的安全处理。
2991

被折叠的 条评论
为什么被折叠?



