欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?Object類(lèi)和包裝類(lèi)深入解讀

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

查看源代碼方法

在IDEA中雙擊 shift 鍵,可以搜索相關(guān)類(lèi)名,查看源代碼

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

Object類(lèi)

定義及應(yīng)用

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

示例:

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

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

接下來(lái)我們來(lái)了解Object類(lèi)中兩個(gè)常用的方法

1. toString()

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

運(yùn)行下面代碼:

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);
    }
}

運(yùn)行結(jié)果:

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

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

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

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

2. equals( )

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

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

//輸出:false

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

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

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

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

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

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

包裝類(lèi)

定義及應(yīng)用

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

對(duì)象包裝類(lèi)(Object雷的直接子類(lèi))

Boolean、Character

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

Byte、Short、Integer、Long、Float、Double

以 Integer  類(lèi)為例應(yīng)用:

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

  //輸出:10

裝箱和拆箱

裝箱:將基本類(lèi)型變?yōu)榘b類(lèi)對(duì)象

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

在上述示例中:

在我們實(shí)際操作時(shí),反復(fù)的拆裝箱是很麻煩的,在Java中為我們提供了自動(dòng)裝箱、拆箱

代碼示例:

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

//輸出:22

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

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

  • 在類(lèi)中定義成員變量,必須使用包裝類(lèi)聲明
  • 在方法中,大量進(jìn)行算術(shù)運(yùn)算使用基本類(lèi)型

自己實(shí)現(xiàn)包裝類(lèi)

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 -> 類(lèi)
        IntDemo demo = new IntDemo(10);
        int data = demo.intValue();
        System.out.println(data+1);
    }
}

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

通過(guò)包裝類(lèi)讓Object類(lèi)接收基本數(shù)據(jù)類(lèi)型

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

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

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

//輸出:11

包裝類(lèi)的對(duì)象比較

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

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

//輸出:true

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

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

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

代碼實(shí)現(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í)若字符串不是純數(shù)字組成,運(yùn)行時(shí)就是出現(xiàn)類(lèi)型轉(zhuǎn)換異常。

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

相關(guān)文章

  • SpringBoot 二維碼生成base64并上傳OSS的實(shí)現(xiàn)示例

    SpringBoot 二維碼生成base64并上傳OSS的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot 二維碼生成base64并上傳OSS的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • mybatis配置mapper-locations位置的三種方式小結(jié)

    mybatis配置mapper-locations位置的三種方式小結(jié)

    這篇文章主要給大家介紹了關(guān)于mybatis配置mapper-locations位置的三種方式,Mybatis-Plus的初衷是為了簡(jiǎn)化開(kāi)發(fā),而不建議開(kāi)發(fā)者自己寫(xiě)SQL語(yǔ)句的,但是有時(shí)客戶(hù)需求比較復(fù)雜,需要的朋友可以參考下
    2023-08-08
  • 用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)

    用Java將字符串的首字母轉(zhuǎn)換大小寫(xiě)

    在項(xiàng)目開(kāi)發(fā)的時(shí)候會(huì)需要統(tǒng)一字符串的格式,比如首字母要求統(tǒng)一大寫(xiě)或小寫(xiě),那用Java如何實(shí)現(xiàn)這一功能?下面一起來(lái)學(xué)習(xí)學(xué)習(xí)。
    2016-08-08
  • Java的jps命令簡(jiǎn)介及使用示例詳解

    Java的jps命令簡(jiǎn)介及使用示例詳解

    jps是jdk提供的一個(gè)查看當(dāng)前java進(jìn)程的小工具,?可以看做是JavaVirtual?Machine?Process?Status?Tool的縮寫(xiě),非常簡(jiǎn)單實(shí)用,本文重點(diǎn)給大家介紹下Java的jps命令使用,感興趣的朋友一起看看吧
    2022-03-03
  • Java實(shí)現(xiàn)SSL雙向認(rèn)證的方法

    Java實(shí)現(xiàn)SSL雙向認(rèn)證的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)SSL雙向認(rèn)證的方法,實(shí)例分析了ssl認(rèn)證的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • Java?Agent?(代理)探針技術(shù)詳情

    Java?Agent?(代理)探針技術(shù)詳情

    這篇文章主要介紹了Java?Agent?探針技術(shù)詳情,Java?中的?Agent?技術(shù)可以讓我們無(wú)侵入性的去進(jìn)行代理,最常用于程序調(diào)試、熱部署、性能診斷分析等場(chǎng)景,下文更多相關(guān)資料,感興趣的小伙伴可以參考一下
    2022-04-04
  • mybatis plus條件構(gòu)造器queryWrapper、updateWrapper

    mybatis plus條件構(gòu)造器queryWrapper、updateWrapper

    這篇文章主要介紹了mybatis plus條件構(gòu)造器queryWrapper、updateWrapper,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring三級(jí)緩存解決循環(huán)依賴(lài)

    Spring三級(jí)緩存解決循環(huán)依賴(lài)

    本文主要介紹了Spring三級(jí)緩存解決循環(huán)依賴(lài),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • java HashMap內(nèi)部實(shí)現(xiàn)原理詳解

    java HashMap內(nèi)部實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了java HashMap內(nèi)部實(shí)現(xiàn)原理詳解的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringCloud將Nacos作為配置中心實(shí)現(xiàn)流程詳解

    SpringCloud將Nacos作為配置中心實(shí)現(xiàn)流程詳解

    這篇文章主要介紹了Springcloud中的Nacos Config服務(wù)配置,本文以用戶(hù)微服務(wù)為例,進(jìn)行統(tǒng)一的配置,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10

最新評(píng)論