为什么Java中Integer类的两个对象不能相等



我的代码是:

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

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

有没有其他方法可以使物体相等?

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

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()方法。

Integer是Object not primitive(int),与equals方法相比对象相等。

当您执行z == h时,它不会取消框为int值,除非它检查两个Integer引用(z&h)是否引用相同的引用。

正如它在文档中派生的那样-

当且仅当参数不为null且为包含与此对象相同int值的Integer对象。

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

它将打印true

您试图比较两个不同的对象,而不是它们的值。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.

最后,我们有两个不同的Integer对象,即值为44的对象1和对象2。现在

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  

将返回true。

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

Integer是一个对象,而不是基元。如果z&h是基元,==可以正常工作。在处理对象时,==运算符不检查是否相等;它检查两个引用是否指向同一个对象。

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

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

Integer是比较对象的地址/引用/指针而不是值的对象。

Integer a = Integer(1);
Integer b = Integer(1);
a == b; // false
a.compareTo(b); // true

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

相关内容

  • 没有找到相关文章

最新更新