求大侠指教:
int r = 7;
int k = 7;
Integer a = r;
Integer b = k;
System.out.println(a == b); //true
System.out.println(new Integer(r) == new Integer(k)); // false
System.out.println(new Integer(r) == new Integer(7)); // false
System.out.println(new Integer(7) == new Integer(7)); // false
System.out.println(new Integer(r) == new Integer(r)); // false
System.out.println(new Integer(r).equals(new Integer(r))); // true
System.out.println(new Integer(r).equals(new Integer(k))); // true
在上面的语句中,为什么new Integer(r) == new Integer(r) 会报错? 还有,为什么new Integer(r).equals(new Integer(r))则返回了true?
int r = 7;
int k = 7;
Integer a = r;
Integer b = k;
System.out.println(a == b); //true
System.out.println(new Integer(r) == new Integer(k)); // false
System.out.println(new Integer(r) == new Integer(7)); // false
System.out.println(new Integer(7) == new Integer(7)); // false
System.out.println(new Integer(r) == new Integer(r)); // false
System.out.println(new Integer(r).equals(new Integer(r))); // true
System.out.println(new Integer(r).equals(new Integer(k))); // true
在上面的语句中,为什么new Integer(r) == new Integer(r) 会报错? 还有,为什么new Integer(r).equals(new Integer(r))则返回了true?
同学,可以认真看一下我的问题。我问的是两个指向同一个对象的引用变量,这两个引用变量的比较不相同。但是用equals时,这两个引用变量是一致的。另外,对于“==” 和equals的理解,我是这样认为的,对于基本数据类型,“==”比较的是值。对于引用类型,“==”比较的是地址。对于String类型的引用变量,equals比较的是两个引用变量的值。但是对于Object对象,equals方法比较的也是对象的地址。只是String类型中重写了Object类的equals方法,这个你可以看一下底层实现。