输出为: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
答案 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)