日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第三次学JAVA再学不好就吃翔(part45)--Object类

發(fā)布時間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第三次学JAVA再学不好就吃翔(part45)--Object类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)筆記,僅供參考


文章目錄

      • API概述
      • Object類
        • hashCode()方法
        • getClass()方法
        • toString()方法
        • equals()方法
        • ==與equals()方法的區(qū)別


API概述


API(Application Programming Interface) ,是指應(yīng)用程序編程接口。Java API,就是Java提供給我們使用的類,這些類將底層的實現(xiàn)封裝了起來、


Object類


  • Object類概述
    • 它是類層次結(jié)構(gòu)的根類
    • 所有類都直接或者間接的繼承自該類
  • 構(gòu)造方法
    • 只有空參構(gòu)造:public Object();

備注:子類的構(gòu)造方法默認訪問的是父類的空參構(gòu)造方法


hashCode()方法


  • 方法概述

    • hashCode()方法會返回該對象的哈希碼值,返回值類型是int類型,默認情況下,該方法會根據(jù)該對象的地址來計算。
    • 不同對象的,hashCode()一般來說不會相同,但是同一個對象的hashCode()值肯定相同。
  • 舉個例子

package com.guiyang.object;import com.guiyang.bean.Cat;public class Demo1_HashCode {public static void main(String[] args) {Object o1 = new Object();System.out.println(o1.hashCode()); Cat c1 = new Cat();System.out.println(c1.hashCode());Cat c2 = new Cat();System.out.println(c2.hashCode());}}

輸出:

1829164700 2018699554 1311053135

getClass()方法


  • 方法概述
    • 該方法會返回對象的字節(jié)碼文件(.class文件),返回值類型為Class類。
    • 我們可以通過調(diào)用Class類中的方法,來獲取信息,比如getName()方法可以獲取對象的類的全名稱

  • 舉個例子
package com.guiyang.object;import com.guiyang.bean.Student;public class Demo2_GetClass {public static void main(String[] args) {Student s1 = new Student();Class clazz = s1.getClass(); //獲取s1的字節(jié)碼文件String name = clazz.getName();System.out.println(name);}}

輸出:

com.guiyang.bean.Student

toString()方法


toString()方法會返回該對象的字符串表示,我們可以通過改寫類的toString方法,來顯示對象的屬性值。


  • 舉個例子1(未重寫的toString方法)
package com.guiyang.restudy3;import com.guiyang.bean.Cat;public class D3ToString {public static void main(String[] args) {Cat cat = new Cat();System.out.println(cat.toString());System.out.println(cat); //如果直接打印對象的引用,會默認調(diào)用toString方法} }

輸出:

com.guiyang.bean.Cat@6d06d69c com.guiyang.bean.Cat@6d06d69c

我們看到@左邊是Cat類的全名,@右邊是該對象的十六進制哈希碼值。


  • 舉個例子(重寫Student類的toString方法)

我們看到上面例子中toString()方法輸出的結(jié)果好像沒什么意義,這時,我們可以改寫該類的toString()方法,比如,我們改寫Student類的toString()方法:

package com.guiyang.bean;public class Student {private String name;private int age;public Student() {super();}public Student(String name, int age) {super();this.name = name;this.age = age;}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;}@Overridepublic String toString() { //alt+shift+s 再加 sreturn "Student [name=" + name + ", age=" + age + "]";}}
  • 舉個例子3(重寫的toString方法)
package com.guiyang.object;import com.guiyang.bean.Cat; import com.guiyang.bean.Student;public class Demo3_ToString {public static void main(String[] args) {Student s1 = new Student("小白", 18);String str = s1.toString(); //這里我們改寫了Student類的toString方法System.out.println(str);System.out.println(s1); //如果直接打印對象的引用,會默認調(diào)用toString方法Cat c1 = new Cat();System.out.println(c1); //未改寫的toString方法}}

輸出:

Student [name=小白, age=18] Student [name=小白, age=18] com.guiyang.bean.Cat@6d06d69c

equals()方法


該方法可以判斷兩個對象是否相等(默認情況下比較的是對象的引用是否相同),返回值為布爾類型,由于比較對象的引用沒有意義,一般建議重寫該方法。


  • 舉個例子1(未重寫equals()方法)
package com.guiyang.restudy3;import com.guiyang.eclipse.Bunny;public class D4Equals {public static void main(String[] args) {Bunny bunny1 = new Bunny();Bunny bunny2 = new Bunny();boolean b = bunny1.equals(bunny2);System.out.println(b);System.out.println(bunny1 == bunny2);}}

輸出:

false false

我們看到未重寫equals方法時,該方法對比的是兩個對象的地址值是否相等,它的作用和==相同,所以我們需要重寫該方法,擴展該功能,比較對象的屬性值,比如相同屬性的對象可以相等。


  • 舉個例子2(重寫B(tài)unny類的equals()方法)
package com.guiyang.eclipse;public class Bunny {private String name;private int age;public Bunny() {super();}public Bunny(String name, int age) {super();this.name = name;this.age = age;}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;}@Overridepublic boolean equals(Object obj) { //alt+shift+s 再加vBunny b = (Bunny)obj; //注意這是多態(tài),需要向下轉(zhuǎn)型return this.name.equals(b.name) && this.age == b.age; //String類的equals方法} }
  • 舉個例子3(重寫equals()方法)
package com.guiyang.restudy3;import com.guiyang.eclipse.Bunny;public class D4Equals {public static void main(String[] args) {Bunny bunny1 = new Bunny("Huang", 9);Bunny bunny2 = new Bunny("Huang", 9);boolean b = bunny1.equals(bunny2); //注意,如果我們利用空參構(gòu)造創(chuàng)建對象,那么name的默認值為null,而null不是一個字符串,所以會報錯System.out.println(b); //比較對象的屬性值System.out.println(bunny1 == bunny2);//比較對象地址值} }

輸出:

true false
  • null和空字符串的區(qū)別

null與空字符串主要區(qū)別如下:

  • null不指向任何對象,相當于沒有任何值;而空字符串代表一個長度為0的字符串

  • null不分配內(nèi)存空間;而空字符串會分配內(nèi)存空間


==與equals()方法的區(qū)別


  • ==是一個比較運算符號,既可以比較基本數(shù)據(jù)類型,也可以比較引用數(shù)據(jù)類型,基本數(shù)據(jù)類型比較的是值,引用數(shù)據(jù)類型比較的是地址值.
  • equals方法,只能比較引用數(shù)據(jù)類型,所有的對象都會繼承Object類中的方法,如果沒有重寫Object類中的equals方法,equals方法和==號比較引用數(shù)據(jù)類型無區(qū)別,重寫后的equals方法可以比較對象中的屬性值

總結(jié)

以上是生活随笔為你收集整理的第三次学JAVA再学不好就吃翔(part45)--Object类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。