[英]Why two objects of a specific class with same properties and functions are not equal in java?
[英]why 2 objects of Integer class in Java cannot be equal
我的代碼是:
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.equals(z)
代替h == z
來獲得您期望的相等行為。
h == z
只有在通過自動裝箱分配值時才有效(即Integer a = 43
)且值介於-128和127之間(緩存值),即:
Integer a = 44;
Integer b = 44;
System.out.println("a == b -> " + (a == b));
OUTPUT:
a == b -> true
如果該值超出范圍[-128, 127]
,則返回false
Integer a = 1000;
Integer b = 1000;
System.out.println("a == b -> " + (a == b));
OUTPUT:
a == b -> false
但是,比較兩個對象的正確方法是使用Integer.equals()
方法。
Integer
是Object not primitive(int)和Object equals
與equals
方法比較。
當你執行z == h
它不會取消裝入int
值,除非它檢查Integer
引用(z和h)是否引用相同的引用。
因為它來自文檔 -
當且僅當參數不為null並且是包含與此對象相同的int值的Integer對象時,結果才為真。
System.out.println("z == h -> " + h.equals( z));
這將打印true
。
整數是一個對象,而不是一個原始對象。 如果z&h是原始的,==會工作得很好。 處理對象時,==運算符不檢查是否相等; 它檢查兩個引用是否指向同一個對象。
因此,使用z.equals(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對象,即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 : //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
檢查以確保您可以在Integer對象上使用z ++。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.