亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試等于方法

測試等于方法

慕妹3146593 2021-10-28 16:35:59
我有一個奇怪的問題,我無法理解為什么會發生這種情況。我equals在一個DoublyLinkedList泛型類中實現了這個方法:@Override    public boolean equals(Object obj) {        if (this == obj) {            return true;        }        if (getClass() != obj.getClass() || obj == null) {            return false;        }        DoublyLinkedList<E> other = (DoublyLinkedList<E>) obj;        if (this.size != other.size) {            return false;        }        Iterator<E> iterator = this.iterator();        Iterator<E> otherIterator = other.iterator();        while(iterator.hasNext()){                   if(iterator.next() != otherIterator.next()){                return false;            }        }        return true;    }在單元測試中測試此方法,如下所示:@Testpublic void testEquals() {    System.out.println("equals");    DoublyLinkedList <String> instance1 = new DoublyLinkedList <>(), instance2 = new DoublyLinkedList <>();    instance1.addLast("Xpto");    instance1.addLast("Ypto");    instance1.addLast("Zpto");    instance2.addLast("Xpto");    assertFalse("Lists should not be equal", (instance1.equals(instance2)));    assertFalse("Lists should not be equal", (instance2.equals(instance1)));            instance2.addLast("Ypto");    assertFalse("Lists should not be equal", (instance1.equals(instance2)));    assertFalse("Lists should not be equal", (instance2.equals(instance1)));    instance2.addLast("Zpto");    assertTrue("Lists should be equal", (instance1.equals(instance2)));    assertTrue("Lists should be equal", (instance2.equals(instance1)));       }告訴我測試通過了。但是,如果我在第一個代碼中使用!=, 而不是equals比較每個迭代器的實例,為什么會發生這種情況?它不應該比較引用,從而失敗嗎?
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

Java 正在代表您駐留(或緩存)某些引用。具體來說,如果您輸入Strings 作為您的類型,您將遇到一些奇怪的字符串實習行為,突然之間,您的列表具有相同的String. 這是完全可以處理引用的唯一方法==- 如果它以某種方式被嵌入或緩存并且可以被引用。

這是微不足道的失??;如果您使用的值不能被實習或緩存,那么您將觀察到您的測試失敗。

例如,new BigInteger("100")new BigInteger("100")在內存中的位置不同,如果將它們都放在列表中并嘗試比較等價性,則會得到false.


查看完整回答
反對 回復 2021-10-28
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號