当我用原语检查eqality时,equals运算符如何工作?

时间:2016-05-05 06:00:51

标签: java operators

输出为:true,true *,false * case = 1和case = 2的情况如何 如果情况:1是真的比为什么?值5有不同的内存分配? 我们知道' =='运算符基于内存或参考进行比较

   Integer a=new Integer(5);
   Integer b=a;
   System.out.println(a==b);  //true i know 
  /*case:1 */System.out.println(a==5); //true? why

  /*case :2 */ System.out.println(a==new Integer(5)); // false ? why 

2 个答案:

答案 0 :(得分:1)

检查java doc for Integer https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

比较对象的正确方法是使用equals

public boolean equals(Object obj)

将此对象与指定对象进行比较。当且仅当参数不为null并且是包含与此对象相同的int值的Integer对象时,结果才为真。 覆盖: 在类Object中等于 参数: obj - 要与之比较的对象。 返回: 如果对象相同则为true;否则就是假的。

答案 1 :(得分:0)

对于情况2,整数a是自动取消装箱的,产生基元5,等于5。

对于案例3,创建了一个新的Integer对象,该对象具有与该等式不同的地址,无法通过==进行检查。在这种情况下你必须使用equals-method:(a.equals(new Integer(5))为true)