public static void main(String[] args){ Long cnt = 0L; System.out.println(cnt.equals(0L)); }
这一句输出true
public static void main(String[] args){ Long cnt = 0L; System.out.println(cnt.equals(0)); }
这一句输出false
在这段代码中,cnt 是一个包装类型 Long 的对象,其值为 0L。当使用 cnt.equals(0) 时,会尝试将 0(int 类型字面量)自动装箱为一个 Integer 对象,然后调用 Long 类的 equals() 方法进行比较。 由于 Long 和 Integer 是不同的类型,它们的 equals() 方法会首先检查两个对象的类型是否相同。在这个例子中,equals() 方法会发现 cnt 是一个 Long 类型,而传入的参数是一个 Integer 类型,因此返回 false。
可以将 cnt 对象拆箱为基本类型 long,然后与 0(int 类型字面量)进行比较。这里,0 会自动提升为 long 类型,然后进行数值比较。
public static void main(String[] args){ long cnt = 0L; System.out.println(cnt==0); }
这么写也能达到预期目的,输出false。