我的代码是:
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?
有没有其他方法可以使对象相等?
发布于 2013-02-09 16:03:39
您正在尝试比较两个不同的对象,而不是它们的值。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指向的对象是否相同。ie 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/有帮助
发布于 2013-02-09 15:41:42
不是的。使用h.equals(z)而不是h == z来获得您期望的相等行为。
发布于 2013-02-09 15:48:42
只有当您通过自动装箱(即Integer a = 43)赋值并且值在-128到127 (缓存值)之间时,h == z才会起作用,即:
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()方法。
https://stackoverflow.com/questions/14786014
复制相似问题