Java基礎(chǔ) 第三節(jié) 第一課

      網(wǎng)友投稿 686 2022-05-30

      Object 類

      概述

      toString 方法

      方法摘要

      覆蓋重寫

      equals 方法

      方法摘要

      默認(rèn)地址比較

      對象內(nèi)容比較

      Objects 類

      概述

      java.lang.object類是 Java 語言中的根類, 即所有類的父類. 它中描述的所有方法子類都可以使用. 在對象實(shí)例化的時候, 最終找到的父類就是 Object.

      如果一個類沒有特別值定父親, 那么默認(rèn)則繼承自 Object 類. 例如:

      public class MyClass /*extends Object*/ { // ... }

      1

      2

      3

      根據(jù) JDK 源代碼及 Object 類的 API 文檔, Object 類當(dāng)中包含的方法有 11 個. 今天我們主要學(xué)習(xí)其中的 2 個:

      public String toString(): 返回該對象的字符串表示

      public boolean equals(Object obj): 指示其他某個對象是否與此對象 “相等”.

      toString 方法

      方法摘要

      public String toString(): 返回該對象的字符串表示.

      toString 方法返回該對象的字符串表示, 其實(shí)該字符串內(nèi)容就是對象的類型 + @ +內(nèi)存地址值.

      由于 toString 方法返回的結(jié)果是內(nèi)存地址, 而在開發(fā)中, 經(jīng)常需要按照對象的屬性得到相應(yīng)的字符串表現(xiàn)形式, 因此需要重寫它.

      覆蓋重寫

      如果不希望使用 toString 方法的默認(rèn)行為, 則可以對它進(jìn)行覆蓋重寫. 例如自定義 Person 類:

      public class Person { private String name; private int age; // get/set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 覆蓋重寫toString方法 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      在 IntelliJ IDEA 中, 可以點(diǎn)擊 Code 菜單中的 Generate, 也可以使用快捷鍵 alt + insert, 點(diǎn)擊 toString() 選項. 選擇需要包含的成員變量并確定. 如下圖所示:

      注: 在我們直接使用輸出語句輸出對象名的時候, 其實(shí)通過該對象調(diào)用了其 toString() 方法.

      equals 方法

      方法摘要

      public boolean equals(Object obj): 指其他某個對象是否與此對象 “相等”.

      調(diào)用成員方法 equals 并指定參數(shù)為另一個對象, 則可以判斷這兩個對象是否是相同的. 這;里的 “相同” 有默認(rèn)和定義兩種方式.

      默認(rèn)地址比較

      如果沒有覆蓋重寫 equals 方法, 那么 Object 類中默認(rèn)進(jìn)行 == 運(yùn)算符的地址比較, 只要不是同一個對象, 結(jié)果必然為 flase.

      對象內(nèi)容比較

      如果希望進(jìn)行對象的內(nèi)容比較, 即所有或指定的部分成員相同就判斷兩個對象相同. 則可以覆蓋重寫 equals 方法. 例如:

      import java.util.Objects; public class Person { private String name; private int age; @Override public boolean equals(Object o) { // 如果對象地址一樣, 則認(rèn)為相同 if (this == o) { return true; } // 如果參數(shù)為空, 或者類型信息不一樣, 則認(rèn)為不同 if (o == null || getClass() != o.getClass()) { return false; } // 轉(zhuǎn)換為蒼穹類型 Person person = (Person) o; // 要求基本類型相等, 并且引用類型交給 java.util.Objects 類的 equals 靜態(tài)方法取用結(jié)果 return age == person.age && Objects.equals(name, person.name); } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      Java基礎(chǔ) 第三節(jié) 第一課

      22

      這段代碼充分考慮了對象為空, 類型一致等問題, 但方法內(nèi)容并不唯一. 大多數(shù) IDE 都可以自動生成 equals 方法的代碼內(nèi)容. 在 IntelliJ IDEA 中, 可以使用 Code 菜單中的 Generate 選項, 也可以使用快捷鍵 alt + insert, 并選擇 equals and hashCode() 進(jìn)行自動代碼生成. 如下圖所示:

      注: Object 類當(dāng)中的 hashCode 等其他方法, 今后學(xué)習(xí).

      Objects 類

      在剛才 IDEA 自動重寫 equals 代碼中, 使用到了java.util.Objects類, 那么這個類是什么呢?

      在 JDK7 中添加了一個 Objects 工具類, 它提供了一些方法來操作對象. Objects 類由一些靜態(tài)的實(shí)用方法組成, 這些方法是 null-save (空指針安全的) 或 null-tolerant (容忍空指針的), 用于計算對象的 hashcode, 返回對象的字符串表示形式, 比較兩個對象.

      在比較兩個對象的時候, Objects 的 equals 方法容易拋出空指針異常. 而 Objects 類中的 equals 方法就優(yōu)化了這個問題. 方法如下:

      public static boolean equals(Object a, Object b): 判斷兩個對象是否相等.

      我們可以查看一下源碼, 學(xué)習(xí)一下:

      public static boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }

      1

      2

      3

      IDE Java

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:C++搭建集群聊天室(九):數(shù)據(jù)庫代碼及用戶模型代碼封裝
      下一篇:「免費(fèi)開源」基于Vue和Quasar的crudapi前端SPA項目實(shí)戰(zhàn)之文件上傳(十)
      相關(guān)文章
      亚洲日本人成中文字幕| 久久精品国产亚洲AV果冻传媒| 亚洲网址在线观看你懂的| 国产亚洲婷婷香蕉久久精品| 亚洲人成影院在线无码观看| 国产精品亚洲五月天高清| 亚洲AV无码成人精品区狼人影院| 在线aⅴ亚洲中文字幕| 在线aⅴ亚洲中文字幕| 亚洲另类无码专区丝袜| 亚洲日韩看片无码电影| 亚洲国产精品无码中文lv | 亚洲人成网站在线播放2019| 亚洲国产综合精品中文第一| 亚洲午夜无码毛片av久久京东热| 亚洲日韩乱码中文字幕| 亚洲国产日韩a在线播放| 亚洲av无码一区二区三区在线播放| 亚洲国产成人精品无码区二本| 亚洲av无码不卡久久| 亚洲综合成人婷婷五月网址| 久久精品国产亚洲AV无码娇色| 久久久久久亚洲AV无码专区| 亚洲欧洲日产国码在线观看| 亚洲国产精品综合福利专区| 国产99在线|亚洲| 亚洲国产精品美女久久久久| 亚洲A∨午夜成人片精品网站| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲AV无码一区二区三区人 | 亚洲一级毛片在线播放| 亚洲日本乱码卡2卡3卡新区| 亚洲国产精品嫩草影院| 亚洲精品动漫人成3d在线 | 亚洲成AV人片在线观看| 久久精品九九亚洲精品| 亚洲av无码片区一区二区三区| 亚洲日韩亚洲另类激情文学| 亚洲精品tv久久久久| 亚洲成色www久久网站夜月| 亚洲综合激情视频|