首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java中Integer类的两个对象不能相等

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

Stack Overflow用户
提问于 2013-02-09 15:39:59
回答 7查看 4.6K关注 0票数 6

我的代码是:

代码语言:javascript
复制
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 ));
  }
}

输出:-

代码语言:javascript
复制
z == h -> false

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

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-02-09 16:03:39

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

代码语言:javascript
复制
z == h 

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

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

代码语言:javascript
复制
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。现在

代码语言:javascript
复制
z = h

这将检查z和h指向的对象是否相同。ie object1 == object2,这是假的。如果你这样做了

代码语言:javascript
复制
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.

现在

代码语言:javascript
复制
z == h  

将返回true。

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

票数 1
EN

Stack Overflow用户

发布于 2013-02-09 15:41:42

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

票数 6
EN

Stack Overflow用户

发布于 2013-02-09 15:48:42

只有当您通过自动装箱(即Integer a = 43)赋值并且值在-128到127 (缓存值)之间时,h == z才会起作用,即:

代码语言:javascript
复制
 Integer a = 44;
 Integer b = 44;

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

输出:

代码语言:javascript
复制
a == b -> true

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

代码语言:javascript
复制
 Integer a = 1000;
 Integer b = 1000;

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

输出:

代码语言:javascript
复制
a == b -> false

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14786014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档