摘要:今天就來(lái)談?wù)労偷淖饔煤蛥^(qū)別。對(duì)于基礎(chǔ)類(lèi)型的作用就是判斷值是否相等比如是是。就是重寫(xiě)了方法,所以出現(xiàn)了和結(jié)果不一致的情況。當(dāng)然重寫(xiě)是有一定的標(biāo)準(zhǔn)的,如傳遞性,對(duì)稱(chēng)性等等,具體可以看源碼要求不再一一展開(kāi)。
判斷對(duì)象是否相等是我們?cè)陧?xiàng)目中經(jīng)常用到的,也是入門(mén)java必學(xué)的知識(shí)。今天就來(lái)談?wù)?=和equals的作用和區(qū)別。
1.==如何判斷相等
先看一下一段代碼:
int i1 = 1; int i2 = 1; String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(i1==i2); System.out.println(s1==s2);,
運(yùn)行結(jié)果是true false,為什么一個(gè)是相等,而第二個(gè)是不等的。
1)對(duì)于基礎(chǔ)類(lèi)型(char、byte、short、int、long、float、double、boolean )==的作用就是判斷值是否相等比如1.1==1.1是true,1=2是false。
2)對(duì)于對(duì)象來(lái)說(shuō),==的作用是判斷對(duì)象的引用(對(duì)象的內(nèi)存地址)是否一致。如果想判斷對(duì)象的值是否一致,就需要用到equals。
2.equals的作用
先看一段代碼:
String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1.equals(s2)); System.out.println(s1==s2);
運(yùn)行結(jié)果:true false,那么為什么equals和==的結(jié)果是不一樣的?
equals是java.lang.Object中的方法,所有對(duì)象都是繼承Objetct的,也就是所有對(duì)象都擁有equals方法。源碼如下:
public boolean equals(Object obj) { return (this == obj); }
原始的實(shí)現(xiàn)很簡(jiǎn)單就是用了==,但是我們可以重寫(xiě)equals方法,達(dá)到我們想要的判斷值的標(biāo)準(zhǔn)。String.class就是重寫(xiě)了equals方法,所以出現(xiàn)了==和equals結(jié)果不一致的情況。
String.class重寫(xiě)equals的代碼:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
通過(guò)判斷每一個(gè)字符是否一致來(lái)判斷2個(gè)String對(duì)象是否一致。當(dāng)然重寫(xiě)equals是有一定的標(biāo)準(zhǔn)的,如:傳遞性,對(duì)稱(chēng)性等等,具體可以看源碼要求不再一一展開(kāi)。
3.總結(jié):
1).==用于基礎(chǔ)數(shù)據(jù)類(lèi)型時(shí)是判斷值是否一致
用于對(duì)象時(shí)是判斷對(duì)象的引用(所在的內(nèi)存地址)是否一致
2)equals不可用于基礎(chǔ)數(shù)據(jù)類(lèi)型
默認(rèn)也是使用==進(jìn)行判斷,但是可通過(guò)重寫(xiě)方法來(lái)定義自己的判斷標(biāo)準(zhǔn)(重寫(xiě)equals方法時(shí)也需要重寫(xiě)hashcode方法)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67603.html
摘要:中和和的區(qū)別是運(yùn)算符,用于比較兩個(gè)變量是否相等。返回一個(gè)離散的型整數(shù)。在集合類(lèi)操作中使用,為了提高查詢(xún)速度。,等基本數(shù)據(jù)類(lèi)型也稱(chēng)原始數(shù)據(jù)類(lèi)型。如果兩個(gè)對(duì)象根據(jù)方法比較是相等的,那么調(diào)用這兩個(gè)對(duì)象中任意一個(gè)對(duì)象的方法都必須產(chǎn)生同樣的整數(shù)結(jié)果。 java中==和equals和hashCode的區(qū)別 ==是運(yùn)算符,用于比較兩個(gè)變量是否相等。 equals,是Objec類(lèi)的方法,用于比較兩個(gè)...
摘要:百度網(wǎng)盤(pán)提取碼一面試題熟練掌握是很關(guān)鍵的,大公司不僅僅要求你會(huì)使用幾個(gè),更多的是要你熟悉源碼實(shí)現(xiàn)原理,甚至要你知道有哪些不足,怎么改進(jìn),還有一些有關(guān)的一些算法,設(shè)計(jì)模式等等。 ??百度網(wǎng)盤(pán)??提取碼:u6C4?一、java面試題熟練掌握java是很關(guān)鍵的,大公司不僅僅要求你會(huì)使用幾個(gè)api,更多的是要你熟悉源碼實(shí)現(xiàn)原理,甚...
摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會(huì)問(wèn)到混合開(kāi)發(fā)的知識(shí),至于我為什么傾向于混合開(kāi)發(fā),我的一句話(huà)就是走上編程之路,將來(lái)你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...
摘要:接下來(lái)分析幾個(gè)常見(jiàn)的實(shí)現(xiàn)方式。再哈希法再哈希法,就是出現(xiàn)沖突后采用其他的哈希函數(shù)計(jì)算,直到不再?zèng)_突為止。,其中為不同的哈希函數(shù)。 由表及里,循序漸進(jìn),請(qǐng)往下看。隨手點(diǎn)贊是對(duì)作者最大的鼓勵(lì)!^0^。 什么是哈希表 引用:嚴(yán)蔚敏 《數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)》中的內(nèi)容 showImg(https://segmentfault.com/img/bVZlmE?w=800&h=364); 哈希表就是 ...
閱讀 1518·2021-11-18 10:02
閱讀 1657·2021-09-04 16:40
閱讀 3171·2021-09-01 10:48
閱讀 874·2019-08-30 15:55
閱讀 1853·2019-08-30 15:55
閱讀 1365·2019-08-30 13:05
閱讀 3013·2019-08-30 12:52
閱讀 1624·2019-08-30 11:24