![](/img/trans.png)
[英]Java: get Object values from Hashtable<Integer,Hashtable<String,Object>>
[英]Java object comparison and Hashtable with Object keys
假設我有一個MyObject
類,它存儲在2個不同的ArrayList
。 如果從2 ArrayList獲得相同的對象,我將如何比較它們以檢查它們是否相同?
我會執行instance1 == instance2
還是instance1.equals(instance2)
嗎? 我很確定==運算符會查看指針位置,但是如果我從array1獲得instance1和從array2獲得instance2,它們將返回不同的指針位置還是相同的?
與Hashtable相同:它存儲指針位置作為鍵還是實際對象? 如果我有兩個對象具有相同的內容,但實際上是不同的對象,它仍然可以工作嗎?
謝謝
如果我從array1獲取instance1和從array2獲取instance2,它們將返回不同的指針位置還是相同的指針位置?
是的,如果他們指的是同一個對象,則==
將返回true。
ArrayList將精確存儲您提供的內容。 如果您給它一個參考(“地址”),它將存儲該地址。 當您獲取該特定元素時,您將獲得相同的引用。
樣本片段:
Object o = new Object();
List<Object> l1 = new ArrayList<Object>();
List<Object> l2 = new ArrayList<Object>();
l1.add(o);
l2.add(o);
Object o1 = l1.get(0);
Object o2 = l2.get(0);
System.out.println(o1 == o2); // prints true
從某種意義上講,ArrayList 確實做了(引用的副本!)如該片段所示,更改s
時,列表不受影響:
String s = "hello";
List<String> l = new ArrayList<String>();
l.add(s);
s = "world";
System.out.println(l.get(0)); // prints hello
基本上==
比較變量的內容。 由於引用的內容是一個“地址”,因此當且僅當兩個引用引用相同的對象時,使用==
進行比較的引用才會生成true。
o1.equals(o2)
比較o1
和o2
引用的實際對象。
它是否將指針位置存儲為鍵或實際對象? 如果我有兩個對象具有相同的內容,但實際上是不同的對象,它仍然可以工作嗎?
它使用實際對象作為鍵。 如果您有兩個equal
單獨對象,則可以使用其中一個來檢索為該鍵存儲的值。
我很確定==運算符會查看指針位置
這很挑剔,但是不, ==
查看指針的內容或對象的位置。
您需要區分對象和引用 。
兩個不同的列表(或者通常是任何表達式)可以相等地引用同一對象。 例如:
MyObject x = new MyObject();
MyObject y = x;
這里x
和y
是單獨的變量,但是它們都具有引用同一對象的值。 ==
將比較“引用相同的對象”。
如果使用equals
那么(假設您在MyObject
重寫了equals
),兩個不同的對象仍然可以相等。
例如:
Integer x = new Integer(1);
Integer y = new Integer(1);
System.out.println(x == y); // False
System.out.println(x.equals(y)); // True
這里的x
和y
值是對不同對象的引用,但是這些對象被認為是相等的。
那么,您的MyClass
類是否具有除“對象標識”之外的對象平等概念? 比較列表中存儲的參考文獻時,您對哪個方面感興趣?
如果同一對象已存儲在兩個單獨的ArrayList
容器中,並且您想檢查它們是否相同,請使用==
運算符檢查對象身份。
這將起作用,因為只有引用存儲在ArrayList
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.