包含java中equals相同的詞條

本文目錄一覽:

java中equals使用方法

java中equals使用方法:

equals 方法是String類從它的超類Object中繼承的, 被用來檢測兩個對象是否相等,即兩個對象的內容是否相等,區分大小寫。

對於字符串變量來說,使用「==」和「equals()」方法比較字符串時,其比較方法不同。「==」比較兩個變量本身的值,即兩個對象在內存中的首地址。「equals()」比較字符串中所包含的內容是否相同。 例如:

s1 = new String(“abc”);

s2 = new String(“abc”);

s1.equals(s2) 是 true

3.對於非字符串變量來說,”==”和”equals”方法的作用是相同的都是用來比較其對象在堆內存的首地址,即用來比較兩個引用變量是否指向同一個對象。

class A

{

      A obj1   =   new  A();

      A obj2   =   new  A();

}

    obj1.equals(obj2)是false

關於Java中equals()方法的使用。為什麼比較內容相同的對象依然只是false?

java中,

(1)對於字符串變量來說,equal比較的兩邊對象的內容,所以內容相同返回的是true。

至於你沒問到的「==」,比較的是內存中的首地址,所以如果不是同一個對象,「==」不會返回true 而是false。

舉個簡單的例子,

String s1=”abc”, s2=”abc”;

String s3 =new String(“abc”);

String s4=new String(“abc”);

s1==s2 //true,

s1.equals(s2) //true,

s3.equals(s3) //true,equal比較的是內容

s3==s4//false,==比較的是首地址,所以是false

(2)對於非字符串變量,equals比較的內存的首地址,這時候和==是一樣的,即比較兩邊指向的是不是同一個對象,

Sample sa1 = new Sample();

Sample sa2 = new Sample();

sa1.equals(sa2) //false,因為不是同一對象

注意,如果加上

sa1=sa2;

那麼

sa1.equals(sa2) //true

針對你問的,如果你說的兩個對象是非字符串的,那麼參考第2條;否則請參考第一條

java 中 equals() 相等的兩個對象,hashcode() 一定相等

在java中,equals和hashcode是有設計要求的,equals相等,則hashcode一定相等,反之則不然。

為何會有這樣的要求?

在集合中,比如HashSet中,要求放入的對象不能重複,怎麼判定呢?

首先會調用hashcode,如果hashcode相等,則繼續調用equals,也相等,則認為重複。

如果重寫equals後,如果不重寫hashcode,則hashcode就是繼承自Object的,返回內存編碼,這時候可能出現equals相等,而hashcode不等,你的對象使用集合時,就會等不到正確的結果

    public V put(K key, V value) {

        if (key == null)

            return putForNullKey(value);

        int hash = hash(key.hashCode());

        int i = indexFor(hash, table.length);

        for (EntryK,V e = table[i]; e != null; e = e.next) {

            Object k;

            if (e.hash == hash  ((k = e.key) == key || key.equals(k))) {

                V oldValue = e.value;

                e.value = value;

                e.recordAccess(this);

                return oldValue;

            }

        }

        modCount++;

        addEntry(hash, key, value, i);

        return null;

    }

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/199837.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 14:01
下一篇 2024-12-05 14:01

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論