最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Object類和包裝類深入解讀

 更新時間:2022年02月12日 17:01:54   作者:Word碼鴨  
Object類是一個特殊的類,是所有類的父類,如果一個類沒有用extends明確指出繼承于某個類,那么它默認繼承Object類,所謂包裝類,就是能夠直接將簡單類型的變量表示為一個類,在執(zhí)行變量類型的相互轉(zhuǎn)換時,我們會大量使用這些包裝類

查看源代碼方法

在IDEA中雙擊 shift 鍵,可以搜索相關類名,查看源代碼

點擊Structure ,左側(cè)用橙色床框住的部分是類的結(jié)構,結(jié)構包含所有的方法、屬性、內(nèi)部類的聲明。結(jié)構中帶綠色小鎖的圖標表示 public 權限,鑰匙圖標就是繼承權限(protected),紅色鎖的圖標就是 private 權限。右邊是源碼。

Object類

定義及應用

Object類是所有類的默認父類,不需要使用 extends 顯示繼承,因此 Object 類的所有方法(private 除外),所有類的對象都能使用。因此所有對象都可以通過Object來接收

示例:

        Object obj1 = "test";
        Object obj2 = new Student("小陳",18);
        Object obj3 = 123;

在Java中對Object類做了擴充,使它不僅是所有類的父類,只要是引用數(shù)據(jù)類型,都可以向上轉(zhuǎn)型為Object類,包括數(shù)組和接口也就是說, Object 類是引用數(shù)據(jù)類型的最高參數(shù)統(tǒng)一化

接下來我們來了解Object類中兩個常用的方法

1. toString()

將任意對象轉(zhuǎn)為字符串輸出,打印對象內(nèi)容。System.out.println()接收任意對象并輸出,就是默認調(diào)用的 toString方法

運行下面代碼:

class Student{
    private String name;
    private int age;
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
}
public class ObjectTest {
    public static void main(String[] args) {
        Student s1 = new Student("張三",17);
        System.out.println(s1);
    }
}

運行結(jié)果:

可以看到不是我們預期的結(jié)果,為什么呢?我們來看看 toString() 的源碼

此時想要輸出具體內(nèi)容,就需要覆寫 toString()方法:

 public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

//輸出:Student{name='張三', age=17}

2. equals( )

比較兩個對象是否相等,通常比較屬性,承接上例,我們創(chuàng)建一個新對象和s1比較:

        Student s1 = new Student("張三",17);
        Student s2 = new Student("張三",17);
        System.out.println(s1.equals(s2));

//輸出:false

s1和s2的名字和年齡都是相同的,為什么輸出結(jié)果為false呢?讓我們來看看equals方法的源碼

有 new 就有新對象,所以s1和s2顯然不是同一地址。此時Student類默認使用的是Object類提供的equals方法,對于Object類而言,它不知道子類有哪些屬性 ,所以比較的是對象的地址。

如果我們想要比較屬性值就要覆寫equals方法:

  public boolean equals(Object obj){
        //當前對象和傳入的obj比較
        //1.判斷 obj 是否為空
        if (obj == null){
            return false;
        }
        //2.判斷obj是否就是自己,就是地址相同
        if (obj == this){
            return true;
        }
        //3.判斷obj是否是該類的對象,比如傳入一個字符串,它不是Student類型,無法比
        if (!(obj instanceof Object) ){
            return false;
        }
        //4.此時obj一定是Student類的對象,而且兩個對象不是同一個地址
        //向下轉(zhuǎn)型還原為Student,比較對象屬性
        Student stu = (Student) obj;
        return this.name.equals(stu.name)&& this.age == stu.age;
    }
}

equals方法的覆寫非常重要!??!一定要掌握,代碼中應用到的 instanceof 和 向下轉(zhuǎn)型的知識鏈接如下,感興趣的可以去看看哦

詳解Java面向?qū)ο缶幊讨鄳B(tài)

包裝類

定義及應用

包裝類就是將8種數(shù)據(jù)類型封裝為類:

對象包裝類(Object雷的直接子類)

Boolean、Character

數(shù)值型包裝類(Number類的直接子類)

Byte、Short、Integer、Long、Float、Double

以 Integer  類為例應用:

 public static void main(String[] args) {
        //將int -> 類
        Integer data = new Integer(10);
        //value就是將包裝類的內(nèi)容取出來
        int a = data.intValue();
        System.out.println(a);
    }

  //輸出:10

裝箱和拆箱

裝箱:將基本類型變?yōu)榘b類對象

拆箱:將包裝類對象中的數(shù)值還原為基本類型

在上述示例中:

在我們實際操作時,反復的拆裝箱是很麻煩的,在Java中為我們提供了自動裝箱、拆箱

代碼示例:

    public static void main(String[] args) {
        Integer a = 20;
        int b = a+2;
        System.out.println(b);
    }

//輸出:22

可以看到,a是Integer類的對象,但它可以直接和整型數(shù)據(jù)做運算,實際上,   Integer a = 20;就是自動裝箱, int b = a+2;就是自動拆箱過程。所以在用法上,包裝類和基本類型沒有區(qū)別。但是一定要記住,基本數(shù)據(jù)類型的默認值是0,包裝類的默認值為null

那么我們什么時候使用包裝類,什么時候使用基本數(shù)據(jù)類型呢?阿里編碼規(guī)約做如下規(guī)定:

  • 在類中定義成員變量,必須使用包裝類聲明
  • 在方法中,大量進行算術運算使用基本類型

自己實現(xiàn)包裝類

public class IntDemo {
    //保存具體的整型值
    private int data;
    public IntDemo(int data){
        this.data = data;
    }
    public int intValue(){
        return this.data;
    }
 
    public static void main(String[] args) {
        //將int -> 類
        IntDemo demo = new IntDemo(10);
        int data = demo.intValue();
        System.out.println(data+1);
    }
}

//輸出結(jié)果:11

通過包裝類讓Object類接收基本數(shù)據(jù)類型

我們已經(jīng)知道Object類可以接收所有引用類型,可遇到基本數(shù)據(jù)類型就行不通了,包裝類就完美解決了這一問題。 

使用Object類接收,將上例的主方法做如下修改:

    public static void main(String[] args) {
        //將int -> 類
        IntDemo demo = new IntDemo(10);
        Object obj = demo;
        IntDemo demo1 = (IntDemo) obj;
        int data = demo1.intValue();
        System.out.println(data+1);
    }

//輸出:11

包裝類的對象比較

統(tǒng)一使用 equals 方法

        Integer a = 10;
        Integer b =10;
        System.out.println(a .equals(b) );

//輸出:true

包裝類和String的相互轉(zhuǎn)換

① 包裝類 --> String :使用String.valueOf()

② String --> 包裝類 :使用包裝類的parse***()

代碼實現(xiàn):

      public static void main(String[] args) {
        //Integer -> String
       Integer x = new  Integer(200);
        String y = String.valueOf(x);
        System.out.println(y);
 
        //String-> Integer
        String str ="123";
        Integer a = Integer.parseInt(str);
        System.out.println(a);
      }

//輸出結(jié)果:
          200
          123

注意String轉(zhuǎn)換時若字符串不是純數(shù)字組成,運行時就是出現(xiàn)類型轉(zhuǎn)換異常。

到此這篇關于Java Object類和包裝類深入解讀的文章就介紹到這了,更多相關Java Object類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)簡單的飛機大戰(zhàn)游戲(控制主飛機篇)

    Java實現(xiàn)簡單的飛機大戰(zhàn)游戲(控制主飛機篇)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的飛機大戰(zhàn)游戲,控制主飛機,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • java實現(xiàn)傾斜水印鋪滿整張圖

    java實現(xiàn)傾斜水印鋪滿整張圖

    這篇文章主要為大家詳細介紹了java實現(xiàn)傾斜水印鋪滿整張圖的具體代碼,教大家如何控制水印之間的空隙,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 淺談Spring 的Controller 是單例or多例

    淺談Spring 的Controller 是單例or多例

    這篇文章主要介紹了淺談Spring 的Controller 是單例or多例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java構造器方法深入理解

    Java構造器方法深入理解

    這篇文章主要介紹了Java構造器方法深入理解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 淺談java指令重排序的問題

    淺談java指令重排序的問題

    下面小編就為大家?guī)硪黄獪\談java指令重排序的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 將java程序打成jar包在cmd命令行下執(zhí)行的方法

    將java程序打成jar包在cmd命令行下執(zhí)行的方法

    這篇文章主要給大家介紹了關于將java程序打成jar包在cmd命令行下執(zhí)行的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • 在Java中操作Zookeeper的示例代碼詳解

    在Java中操作Zookeeper的示例代碼詳解

    這篇文章主要介紹了在Java中操作Zookeeper的示例代碼詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 學習Java模擬實現(xiàn)百度文檔在線瀏覽

    學習Java模擬實現(xiàn)百度文檔在線瀏覽

    這片文章介紹了如何使用Java模擬實現(xiàn)百度文檔在線瀏覽,文章思路清晰,需要的朋友可以參考下
    2015-07-07
  • ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法

    ThreadLocal 的內(nèi)存泄漏問題通常發(fā)生在使用 ThreadLocal 存儲對象時,尤其是在多線程環(huán)境中,線程池中的線程復用可能導致一些資源沒有及時清理,從而引發(fā)內(nèi)存泄漏,所以本文給大家介紹了ThreadLocal內(nèi)存泄露的產(chǎn)生原因和處理方法,需要的朋友可以參考下
    2024-12-12
  • JavaMail實現(xiàn)帶附件的郵件發(fā)送

    JavaMail實現(xiàn)帶附件的郵件發(fā)送

    這篇文章主要為大家詳細介紹了JavaMail實現(xiàn)帶附件的郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

濮阳市| 龙州县| 临汾市| 乌拉特前旗| 山丹县| 湘潭县| 余庆县| 大名县| 牙克石市| 永修县| 寿宁县| 克山县| 宁强县| 海口市| 新邵县| 武强县| 嘉禾县| 乐昌市| 万荣县| 湾仔区| 临桂县| 庐江县| 建昌县| 武平县| 木兰县| 澜沧| 新化县| 奉化市| 易门县| 高雄县| 晋江市| 昭觉县| 怀柔区| 惠东县| 横峰县| 珲春市| 湟中县| 合作市| 林西县| 文化| 荃湾区|