Java千問:你真的掌握了Java語言的"=="運算符嗎?我看未必!

不少程序設計語言都使用」==」來判斷兩個數據是否相等,咱們在編程中也常用這個運算符,以致於對它已經熟視無睹。那麼是否是任意兩個數據均可以使用」==」來判斷相等呢?」==」比較的究竟是什麼?咱們今天就經過一篇短文來聊聊這個不起眼的」==」運算符。html

1、基礎數據類型之間的比較

首先咱們來看一段代碼
Java千問:你真的掌握了Java語言的
這段代碼當中,聲明瞭8個基礎類型的變量,這8個變量當中, boolean類型的變量flag是個「異類」,爲何這麼說呢?由於其餘7種數據類型之間均可以使用」==」作比較,不管比較的結果是true仍是false,但至少可以順利經過編譯,不會出現語法錯誤。但boolean類型的變量只能與其類型相同的變量進行比較,不然就會出現語法錯誤
Java千問:你真的掌握了Java語言的
經過上面的代碼咱們能夠看到,不能把boolean類型的數據與其餘7種基礎數據進行比較,不然會報錯。咱們把這種現象戲稱爲「孤獨的布爾」。那麼,爲何boolean類型的數據不能與其餘7種基礎數據進行比較呢?緣由很簡單,就是由於其餘7種類型的數據,本質上都是「數字」,咱們使用」==」對這7種數據進行比較,比較的就是「數字的值」是否相等。而boolean類型的數據只有true和false兩種邏輯值,不能用來與「數字」進行比較。編程

2、對象之間的比較

兩個對象之間若是用「==」進行比較,會不會報錯呢?不少人可能會說,我用「==」比較過兩個String對象,其餘狀況彷佛並不清楚。那麼咱們就來講說兩個對象之間用」==」進行比較的規則。首先必須清楚,兩個對象之間若是使用」==」進行比較,比的究竟是什麼?按照Java官方的說法,使用」==」 是比較「兩個對象內存地址的數值是否相等」。咱們可能不太理解這句話的意思,若是翻譯成大白話就是說:看一下這兩個對象是否是「同一個」對象。那麼,是否是任意兩個對象都能用」==」進行比較運算呢?若是這兩個對象的類型是相同的,就能夠用」==」進行運行運算,反之,若是這兩個對象的類型不相同,使用」==」進行比較就會報錯。咱們能夠看下面的代碼
Java千問:你真的掌握了Java語言的
代碼中,a1和a2類型相同,能夠用」==」進行比較,但a1和b1類型不一樣,用」==」進行比較就會報錯。咱們把對象之間的比較規則,能夠用一個詞來歸納,那就是「物以類聚」。意思是類型相同才能進行比較。
兩個對象用」==」進行比較,還有一種特殊狀況,那就是兩個對象的類型之間若是有繼承關係,那麼也是能夠用」==」進行比較的。請看下面的代碼
Java千問:你真的掌握了Java語言的
你們能夠看到,對象f是Father類型的,而對象c是Child類型的。可是Child類是Father類的子類,它們之間有繼承關係,因此對象f和c也是能夠用」==」進行比較的。其實f和c從本質上講,也都是Father類的,因此也符合」物以類聚」規則。ide

3、對象與基礎數據之間比較

按照Java的語法,一個對象是不能直接用」==」和一個基礎數據進行比較。可是,從JDK1.5開始,Java支持一種叫作」自動裝箱拆箱」的機制,這個機制的引入,產生了一種特殊狀況,那就是:基礎數據類型能夠和包裝類對象直接進行比較
在這裏,首先說一下」包裝類」是個什麼東西。Java語言爲了可以讓基礎數據在某些特殊場合下用對象的形式表示或處理基礎數據類型,就爲每種基礎數據類型都定義了一個包裝類。每一個包裝類的對象當中,就包含一個基礎類型的數據。基礎數據類型一共有8種,分別是:Btye、Short、Integer、Long、Double、Float、Character和Boolean,分別對應byte、short、int、long、double、float、char和boolean這8種基礎數據類型。好比一個Integer類的對象當中,就包含了一個int類型的數據。
自動裝箱拆箱機制,可以讓咱們直接在程序中,把包裝類的對象和基礎數據類型進行比較。請看下面的程序
Java千問:你真的掌握了Java語言的
經過這段程序,咱們能夠發現:
一、一個int類型的數據能夠直接和Integer類型的對象用」==」進行比較(見標號爲①的代碼),由於自動拆箱裝箱機制在起做用。
二、一個int類型的數據甚至能夠直接和Double類型的對象直接用」==」進行比較(見標號爲②的代碼),由於有自動裝箱拆箱機制作保證,而且它們本質上都是數字。只要是數字之間的比較都是合法的。
可是:
三、Boolen類型的對象仍是不能和其餘基礎類型數據進行比較(見標號爲③的代碼),由於」布爾是孤獨的」。
四、兩個包裝類對象進行比較,若是這兩個對象類型不一樣,也不能直接比較(見標號爲④的代碼),由於這兩個對象所屬的類型並沒有繼承關係
但願經過這篇短文可以幫助你們對」==」這個運算符會有更深刻的認識。學習

如想系統學習Java編程,能夠點擊https://edu.51cto.com/lecturer/2256836.html觀看我在本站的視頻課程,有問題也能夠加入個人QQ羣291839907一塊兒討論!翻譯

相關文章
相關標籤/搜索