這篇文章將為大家詳細(xì)講解有關(guān)Java中”==”運(yùn)算符的使用豐方法,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、郊區(qū)網(wǎng)絡(luò)推廣、小程序制作、郊區(qū)網(wǎng)絡(luò)營銷、郊區(qū)企業(yè)策劃、郊區(qū)品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供郊區(qū)建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
很多程序設(shè)計(jì)語言都使用”==”來判斷兩個(gè)數(shù)據(jù)是否相等,我們?cè)诰幊讨幸步?jīng)常使用這個(gè)運(yùn)算符,以至于對(duì)它已經(jīng)熟視無睹。
首先我們來看一段代碼
這段代碼當(dāng)中,聲明了8個(gè)基礎(chǔ)類型的變量,這8個(gè)變量當(dāng)中, boolean類型的變量flag是個(gè)“異類”,為什么這么說呢?因?yàn)槠渌?種數(shù)據(jù)類型之間都可以使用”==”做比較,無論比較的結(jié)果是true還是false,但至少能夠順利通過編譯,不會(huì)出現(xiàn)語法錯(cuò)誤。但boolean類型的變量只能與其類型相同的變量進(jìn)行比較,否則就會(huì)出現(xiàn)語法錯(cuò)誤
通過上面的代碼我們可以看到,不能把boolean類型的數(shù)據(jù)與其他7種基礎(chǔ)數(shù)據(jù)進(jìn)行比較,否則會(huì)報(bào)錯(cuò)。我們把這種現(xiàn)象戲稱為“孤獨(dú)的布爾”。那么,為什么boolean類型的數(shù)據(jù)不能與其他7種基礎(chǔ)數(shù)據(jù)進(jìn)行比較呢?原因很簡單,就是因?yàn)槠渌?種類型的數(shù)據(jù),本質(zhì)上都是“數(shù)字”,我們使用”==”對(duì)這7種數(shù)據(jù)進(jìn)行比較,比較的就是“數(shù)字的值”是否相等。而boolean類型的數(shù)據(jù)只有true和false兩種邏輯值,不能用來與“數(shù)字”進(jìn)行比較。
兩個(gè)對(duì)象之間如果用“==”進(jìn)行比較,會(huì)不會(huì)報(bào)錯(cuò)呢?很多人可能會(huì)說,我用“==”比較過兩個(gè)String對(duì)象,其他情況似乎并不清楚。那么我們就來說說兩個(gè)對(duì)象之間用”==”進(jìn)行比較的規(guī)則。首先必須清楚,兩個(gè)對(duì)象之間如果使用”==”進(jìn)行比較,比的到底是什么?按照J(rèn)ava官方的說法,使用”==” 是比較“兩個(gè)對(duì)象內(nèi)存地址的數(shù)值是否相等”。我們可能不太理解這句話的意思,如果翻譯成大白話就是說:看一下這兩個(gè)對(duì)象是不是“同一個(gè)”對(duì)象。那么,是不是任意兩個(gè)對(duì)象都能用”==”進(jìn)行比較運(yùn)算呢?如果這兩個(gè)對(duì)象的類型是相同的,就可以用”==”進(jìn)行運(yùn)行運(yùn)算,反之,如果這兩個(gè)對(duì)象的類型不相同,使用”==”進(jìn)行比較就會(huì)報(bào)錯(cuò)。我們可以看下面的代碼
代碼中,a1和a2類型相同,可以用”==”進(jìn)行比較,但a1和b1類型不同,用”==”進(jìn)行比較就會(huì)報(bào)錯(cuò)。我們把對(duì)象之間的比較規(guī)則,可以用一個(gè)詞來概括,那就是“物以類聚”。意思是類型相同才能進(jìn)行比較。
兩個(gè)對(duì)象用”==”進(jìn)行比較,還有一種特殊情況,那就是兩個(gè)對(duì)象的類型之間如果有繼承關(guān)系,那么也是可以用”==”進(jìn)行比較的。請(qǐng)看下面的代碼
大家可以看到,對(duì)象f是Father類型的,而對(duì)象c是Child類型的。但是Child類是Father類的子類,它們之間有繼承關(guān)系,所以對(duì)象f和c也是可以用”==”進(jìn)行比較的。其實(shí)f和c從本質(zhì)上講,也都是Father類的,所以也符合”物以類聚”規(guī)則。
按照J(rèn)ava的語法,一個(gè)對(duì)象是不能直接用”==”和一個(gè)基礎(chǔ)數(shù)據(jù)進(jìn)行比較。但是,從JDK1.5開始,Java支持一種叫做”自動(dòng)裝箱拆箱”的機(jī)制,這個(gè)機(jī)制的引入,產(chǎn)生了一種特殊情況,那就是:基礎(chǔ)數(shù)據(jù)類型可以和包裝類對(duì)象直接進(jìn)行比較。
在這里,首先說一下”包裝類”是個(gè)什么東西。Java語言為了能夠讓基礎(chǔ)數(shù)據(jù)在某些特殊場(chǎng)合下用對(duì)象的形式表示或處理基礎(chǔ)數(shù)據(jù)類型,就為每種基礎(chǔ)數(shù)據(jù)類型都定義了一個(gè)包裝類。每個(gè)包裝類的對(duì)象當(dāng)中,就包含一個(gè)基礎(chǔ)類型的數(shù)據(jù)。基礎(chǔ)數(shù)據(jù)類型一共有8種,分別是:Btye、Short、Integer、Long、Double、Float、Character和Boolean,分別對(duì)應(yīng)byte、short、int、long、double、float、char和boolean這8種基礎(chǔ)數(shù)據(jù)類型。比如一個(gè)Integer類的對(duì)象當(dāng)中,就包含了一個(gè)int類型的數(shù)據(jù)。
自動(dòng)裝箱拆箱機(jī)制,能夠讓我們直接在程序中,把包裝類的對(duì)象和基礎(chǔ)數(shù)據(jù)類型進(jìn)行比較。請(qǐng)看下面的程序
通過這段程序,我們可以發(fā)現(xiàn):
1、一個(gè)int類型的數(shù)據(jù)可以直接和Integer類型的對(duì)象用”==”進(jìn)行比較(見標(biāo)號(hào)為①的代碼),因?yàn)樽詣?dòng)拆箱裝箱機(jī)制在起作用。
2、一個(gè)int類型的數(shù)據(jù)甚至可以直接和Double類型的對(duì)象直接用”==”進(jìn)行比較(見標(biāo)號(hào)為②的代碼),因?yàn)橛凶詣?dòng)裝箱拆箱機(jī)制做保證,并且它們本質(zhì)上都是數(shù)字。只要是數(shù)字之間的比較都是合法的。
但是:
3、Boolen類型的對(duì)象還是不能和其他基礎(chǔ)類型數(shù)據(jù)進(jìn)行比較(見標(biāo)號(hào)為③的代碼),因?yàn)椤?strong>布爾是孤獨(dú)的”。
4、兩個(gè)包裝類對(duì)象進(jìn)行比較,如果這兩個(gè)對(duì)象類型不同,也不能直接比較(見標(biāo)號(hào)為④的代碼),因?yàn)檫@兩個(gè)對(duì)象所屬的類型并無繼承關(guān)系。
上文描述的就是Java中”==”運(yùn)算符的使用,具體使用情況還需要大家自己動(dòng)手實(shí)驗(yàn)使用過才能領(lǐng)會(huì)。如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!