6

我的代码是:

public class Box
{
  public static void main(String[] args)
  {
     Integer z = new Integer(43);
     z++;

     Integer h = new Integer(44);

     System.out.println("z == h -> " + (h == z ));
  }
}

输出:-

z == h -> false

为什么当两个对象的值相等时输出为假?

有没有其他方法可以使对象相等?

4

7 回答 7

6

否。使用h.equals(z)而不是h == z获得您期望的平等行为。

于 2013-02-09T07:41:42.160 回答
3

h == z仅当您通过自动装箱(即Integer a = 43)分配值并且该值介于 -128 和 127(缓存值)之间时才有效,即:

 Integer a = 44;
 Integer b = 44;

 System.out.println("a == b -> " + (a == b));

输出:

a == b -> true

如果值超出范围[-128, 127],则返回false

 Integer a = 1000;
 Integer b = 1000;

 System.out.println("a == b -> " + (a == b));

输出:

a == b -> false

但是,比较两个对象的正确方法是使用Integer.equals()方法。

于 2013-02-09T07:48:41.877 回答
2

Integer是对象不是原始的(int)并且对象相等性与equals方法进行比较。

当您这样做时,除非它检查两个引用(z & h)是否引用相同的引用,否则它z == h不会将其拆箱。intInteger

正如它在文档中得出的那样-

当且仅当参数不为 null 并且是包含与此对象相同的 int 值的 Integer 对象时,结果才为真。

System.out.println("z == h -> " + h.equals( z));

它将打印true.

于 2013-02-09T07:41:19.460 回答
1

整数是一个对象,而不是一个基元。如果 z & h 是原语, == 就可以了。在处理对象时,== 运算符不检查相等性;它检查两个引用是否指向同一个对象。

因此,使用z.equals(h);h.equals(z);这些应该返回 true。

于 2013-02-09T07:45:24.380 回答
1

您正在尝试比较两个不同的对象而不是它们的值。z 和 h 指向两个不同的 Integer 对象,它们具有相同的值。

z == h 

将检查两个对象是否相等。所以它会返回false。

如果要比较 Integer 对象使用equals方法存储的值。


Integer z = new Integer(43);   // Object1  is created with value as 43.
z++;                           // Now object1 holds 44.

Integer h = new Integer(44); // Object2 is created with value as 44.

所以最后我们有两个不同的整数对象,即object1和object2,值为44。现在

z = h

这将检查 z 和 h 指向的对象是否相同。即object1 == object2 这是错误的。如果你这样做

Integer z = new Integer(43);   // Object1  is created with value as 43.
z++;                           // Now object1 holds 44. Z pointing to Object1

Integer h = z;                 // Now h is pointing to same object as z.

现在

z == h  

将返回真。

这可能会有所帮助http://www.programmerinterview.com/index.php/java-questions/java-whats-the-difference-between-equals-and/

于 2013-02-09T08:03:38.807 回答
1

阅读:http ://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Integer.html

整数是对象,您比较对象的地址/引用/指针而不是值。

Integer a = Integer(1);
Integer b = Integer(1);

a == b; // false
a.compareTo(b); // true
于 2013-02-09T08:09:00.570 回答
0

检查以确保您可以在 Integer 对象上使用 z++。

于 2013-02-09T07:43:44.050 回答