java語言的==和equals 你真的知道用法區別嗎

2020-12-11 FLY閱

java語言的==和equals 你真的知道用法區別嗎

在java語言中,數據分為基本數據類型和引用數據類型。基本數據類型存儲在棧內存,引用數據類型的引用(就是變量的地址)存儲在堆內存。

其實本質上equals 和 == 是一樣的,equals的底層源碼也是用的==,都是比較變量的引用,只不過對於字符串來說,equals被重寫了。

== 是對兩個變量的引用進行判斷是否相等,就是判斷兩個變量指向的內存空間地址是否相同。是對地址的比較。

equals 是判斷兩個變量指向的內存空間的值是不是相同,是對值的比較。

相關焦點

  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    為什麼強調要知道這個呢,知道了java最純粹的啟動方式之後,你才能在啟動出問題的時候,去分析當時啟動的目錄多少,執行命名如何,參數如何,是否有缺失等。 這樣有利於你真正開發中去解決那些奇奇怪怪的可能和環境相關的問題。
  • 你必須掌握的 21 個 Java 核心技術!
    為什麼強調要知道這個呢,知道了java最純粹的啟動方式之後,你才能在啟動出問題的時候,去分析當時啟動的目錄多少,執行命名如何,參數如何,是否有缺失等。這樣有利於你真正開發中去解決那些奇奇怪怪的可能和環境相關的問題。
  • Java為什麼重寫equals一定要重寫hashCode?
    前言最近複習,又看到了這個問題,在此記錄和整理,通過例子來說明這種情況的原因,使大家可以清晰明白這個問題。equals方法equals 是java的obejct類的一個方法,equals的源碼如下:由此我們可以看到equals是用來比較兩個對象的內存地址是否相等。
  • 新手學Java編程應該學那些Java基礎知識
    為什麼強調要知道這個呢,知道了java最純粹的啟動方式之後,你才能在啟動出問題的時候,去分析當時啟動的目錄多少,執行命名如何,參數如何,是否有缺失等。 這樣有利於你真正開發中去解決那些奇奇怪怪的可能和環境相關的問題。
  • java中雙等號和equals的區別,重寫equals時要重寫hashcode
    ,,這個和==號比較對象或者引用類型是一樣的效果如果我們想比較內容的話就需要在Student類裡面重寫equals方法和hashcode方法,這兩個方法是屬於Object裡面的方法,任何類都隱式的繼承了Object類。那為什麼非得重寫hashcode呢?因為對象的比較有硬性規定:應用執行期間,同一個對象內容不發生改變,經過多次調用,hashCode方法都必須始終返回同一個值。
  • Java 14 發布了,可以扔掉Lombok了?
    在JDK 14中,共有16個新特性,本文主要來介紹其中的一個特性:JEP 359: Records官方吐槽最為致命早在2019年2月份,Java 語言架構師 Brian Goetz,曾經寫過一篇文章,詳盡的說明了並吐槽了Java語言,他和很多程式設計師一樣抱怨「Java太囉嗦」或有太多的「繁文縟節」,他提到:開發人員想要創建
  • 萬字梳理,帶你拿下 Java 面試題!
    並發性的:你可以在其中執行許多語句,而不必一次執行它;面向對象的:基於類和面向對象的程式語言;獨立性的:支持一次編寫,到處運行的獨立程式語言,即編譯後的代碼可以在支持 Java 的所有平臺上運行。必須相同;如果兩個對象 equals 不相等,那麼 hashCode 也有可能相同,所以需要重寫 hashCode 方法,因為你不知道 hashCode 的底層構造(反正我是不知道,有大牛可以傳授傳授),所以你需要重寫 hashCode 方法,來為不同的對象生成不同的 hashCode 值,這樣能夠提高不同對象的訪問速度;hashCode 通常是將地址轉換為整數來實現的
  • Java HashSet源碼分析
    原理在《Head fist java》一書中有描述:當你把對象加入 HashSet 時,HashSet 會先計算對象的 hashcode 值來判斷對象加入的位置,同時也會與其他加入的對象的 hashcode 值作比較,如果沒有相符的 hashcode,HashSet 會假設對象沒有重複出現。
  • 為什麼阿里巴巴Java開發手冊強制整型包裝類對象值用equals比較?
    緩存的區間可以修改嗎?其它的包裝類型有沒有類似緩存?接下來,讓我們一起進行分析。源碼分析方法首先我們可以通過源碼對該問題進行分析。我們知道,Integer var = ?形式聲明變量,會通過 java.lang.Integer#valueOf(int) 來構造 Integer 對象。怎麼知道會調用 valueOf() 方法呢?大家可以通過打斷點,運行程序後會調到這裡。
  • Java中重寫equals方法為什麼要重寫hashcode方法?
    == 與 equals的區別如果兩個引用類型變量使用==運算符,那麼比較的是地址,它們分別指向的是否是同一地址的對象。結果一定是false,因為兩個對象不可能存放在同一地址處。所有對象都有equals方法,默認是Object類的equals,其結果與==一樣。如果希望比較對象的值相同,必須重寫equals方法。
  • 「原創」不重寫equals和hashcode難道就不行嗎?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫究竟為什麼要重寫equals和hashcode???目錄1、equals()方法和hashCode()方法介紹1.1、equals()方法1.2、hashCode()方法
  • Java基礎增強篇一,Java核心功能反射機制
    Java反射機制1. java代碼在 java 語言中最核心的就是代碼的運行, 按照面向對象的思想,在調用java代碼時往往需要先創建對象,再調用方法, 而寫在方法中的即所謂的java 代碼先分析Class對象的圖解:
  • Java的新未來:JVM、Kotlin和Java將在2020年後走向何方?
    的確,在很多情況下Java的冗長和繁雜非常惱人。然而,大多數時候,我們不得不接受我們生活在一個不完美的世界裡,只得兩害取其輕。我們都知道Java並不完美,但為什麼以前沒有採取任何措施來解決這些問題。在筆者看來,Java改進緩慢的唯一原因是沒有足夠的競爭壓力,一切便停滯不前。
  • java集合詳解合集
    從傳統意義上講,數組是我們的一個很好的選擇,前提是我們事先已經明確知道我們將要保存的對象的數量。一旦在數組初始化時指定了這個數組長度,這個數組長度就是不可變的,如果我們需要保存一個可以動態增長的數據(在編譯時無法確定具體的數量),java的集合類就是一個很好的設計方案了。集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。
  • Java:hashCode()和equals()的contains,Set方法的協定
    e == null:o.equals(e))時,contains()方法返回true。因此,contains()方法實際上使用equals()方法檢查相等性。注意,可以將null作為元素添加到集合中。以下代碼實際上顯示true。所述公共布爾等於(對象OBJ)方法在對象類中定義。
  • Java反射:框架設計的靈魂
    01.解釋型語言和編譯型語言解釋型語言:不需要編譯,在運行的時候逐行翻譯解釋;修改代碼時可以直接修改,可以快速部署,不過性能上會比編譯型語言稍差;比如 JavaScript、Python ;編譯型語言:需要通過編譯器將原始碼編譯成機器碼才能執行;編譯之後如果需要修改代碼
  • Java基礎面試題簡單總結
    equals()是判讀兩個Set是否相等equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值14、給我一個你最常見到的runtime exception答:常見的運行時異常有如下這些
  • Java初學者入門必須掌握4大核心基礎!
    很多Java編程初學者在剛接觸Java語言程序的時候,不知道該學習掌握哪些必要的基礎知識。本文小編總結了零基礎學習Java程式語言的幾個基礎知識要點。希望能夠對剛入門的Java新手有幫助。初學者先弄清這些Java的基本概念也是必不可少的,死記硬背肯定是不行的,重在理解,理解它們之間的區別與聯繫,分別有哪些應用。想想這些代碼中用到了哪些知識點。不要一味地照著書本敲代碼。而不去理解。1.Java程式語言,即語法。
  • Java enum的用法詳解
    :實現接口所有的枚舉都繼承自java.lang.Enum類。和java.util.EnumMap是兩個枚舉集合。關於這個兩個集合的使用就不在這裡贅述,可以參考JDK文檔枚舉和常量定義的區別一、 通常定義常量方法我們通常利用public final static方法定義的代碼如下,分別用1表示紅燈,3表示綠燈,2表示黃燈。/** * Java學習交流QQ群:589809992 我們一起學Java!
  • java基礎入門-day18-equals()和hashCode()
    1 euqals()方法我們以Person類為例:public boolean equals(Object o)l 如果當前對象與o指向同一實例,那麼直接返回trueif(this == o) return true;