国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java學習筆記之==與equals

2019-11-14 20:58:41
字體:
來源:轉載
供稿:網友
java學習筆記之==與equals

一、問題引入

Java測試兩個變量是否相等有兩種方式:==運算符和equals方法。

但是這二者完全一樣嗎?考慮下面程序:

 1 public class TestEqual  2 { 3     public static void main(String[] args) 4     { 5         int it = 65; 6         float f1 = 65.0F; 7         System.out.

輸出:

65和65.0是否相等? true65和'A'是否相等? truestr1和str2是否相等? falsestr1和是equals str2? true

由程序結果可以看出:

  • 使用==來判斷2個基本類型的的變量(不要求這兩個變量類型一樣,但二者都必須是基本類型),則只要兩個變量字面值相等,使用==判斷就會返回true,5-9行代碼及其輸出說明了這個問題
  • 對于引用類型變量,必須兩個變量指向同一個對象時,==才會返回ture,否則false,11-13行代碼及其輸出說明了這個問題

對于代碼13行的判斷,顯然“不是很合理”,因為直覺上,二者就是一樣的啊,這就是我們經常遇到的判斷兩個引用變量是否相等時,并不嚴格要求兩個引用變量指向同一個對象,如上面程序中的兩個字符串變量,只要二者引用的字符串對象里包含的字符序列相同即可認為相等,此時就需要用到equals方法,上述代碼最后一行就是如此,結果返回true.

二、再看equals

equals方法是Object類提供的一個實例方法,因此所有引用變量都可調用該方法來判斷與其他引用變量是否相等。

真相是殘酷的:其實在判斷兩個引用變量(不是基本類型的變量哦,其實equals是不能夠用來判斷基本類型變量的)是否相等的時候,equals方法與==是一樣的,即只有兩個引用變量指向同一個對象時才會返回true. 這……上面的情況怎么解釋?

眾所周知,所有類都是Object類的子類,所以所有子類都可以重載父類的方法,其實String重寫了父類Object類中的equals方法,自己整了一個標準:只要兩個字符串包含的字符序列相同就返回true,否則false.( 學了C++的孩子可能會說,我重載==運算符,不重載equals方法,不可以嗎,遺憾的是Java是沒有運算符重載的)。

很容易看出來,因為Object類提供的equals方法本質上與==一樣,這就導致,這個方法沒有太大的實際意義,若果像==運算符那樣嚴格的標準比較引用變量,估計實際中很少有兩個引用變量會相等,所以這個方法(如果需要的話)常常在我們建立一個類時,就會重寫該方法,自己定義一套合理的相等判斷標準即可。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁岭市| 枞阳县| 富川| 桃源县| 商河县| 黄浦区| 麻栗坡县| 华容县| 错那县| 龙山县| 苗栗县| 兴隆县| 青龙| 措美县| 洪湖市| 乌兰浩特市| 济源市| 固原市| 泉州市| 宝鸡市| 台北县| 吕梁市| 三穗县| 健康| 嘉义县| 灵武市| 墨竹工卡县| 通辽市| 泗洪县| 桃源县| 章丘市| 泊头市| 驻马店市| 探索| 英德市| 翁源县| 和龙市| 紫金县| 洛隆县| 重庆市| 怀化市|