public static void main(String[] args) { Map<String,String> map = new HashMap<String, String>(); String pp = map.get(""); System.out.println(pp); long p = 5L; int ppu = 5; Long pL = 5L; Integer ppuI = 5; System.out.println(Objects.equals(p,ppu)); System.out.println(p == ppu); System.out.println(pL.equals(ppu)); System.out.println(ppuI.equals(pL)); }
输出即结果:
null
false
true
false
false
第一个结果:false System.out.println(Objects.equals(p,ppu));
源码:
public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
根据源码可以看到,当采用Objects自带的equals时候,输入参数是Object ,ppu转化为Integer p为Long 所以在 a==b时为false
(a != null && a.equals(b)可以参照equal的源码
第二个结果:true System.out.println(p == ppu); 比较的的是数字值所以相等
第三个结果和第四个结果:false
源码:
public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }
在源码中可以看到,在判定数据是否是相等,首先要比较类型,所以,后面两个比较的都是false。