国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

談談包裝類與泛型

這篇具有很好參考價值的文章主要介紹了談談包裝類與泛型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

包裝類

基本數據類型與對應的包裝類

裝箱和拆箱

裝箱

拆箱

泛型

什么是泛型

泛型的語法與使用

泛型的編譯

擦除機制

泛型的上界

泛型方法


提到泛型的話,我們就先提一下包裝類吧!

包裝類

在Java中,由于基本類型不是繼承自Object,為了在泛型代碼中可以支持基本類型,Java給每個基本類型都對應了一個包裝類型。(注意int和char的包裝類不是只大寫第一個字母)


基本數據類型與對應的包裝類

基本數據類型 包裝類
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

裝箱和拆箱

裝箱

裝箱:把一個基本數據類型 轉化為 包裝類型的過程

裝箱又分為自動裝箱和顯示裝箱,但是都調用了valueof()方法。下面代碼可以體現

eg:

    public static void main(String[] args) {
        int a = 10;

        Integer b = a; //自動裝箱

        Integer c = Integer.valueOf(a); //顯示裝箱

    }

拆箱

拆箱:把一個包裝類型 轉化為 基本數據類型的過程

拆箱也分為自動裝箱和顯示裝箱。下面代碼可以體現

eg:

    public static void main(String[] args) {

        Integer a = new Integer(10);

        int b = a; //自動拆箱

        int c = a.intValue(); //顯示拆箱

        double d = a.doubleValue();
    }


泛型

什么是泛型

就是適用于許多許多類型。從代碼上講,就是對類型實現了參數化


下面咱看一個問題:
實現一個類,類中包含一個數組成員,使得數組中可以存放任何類型的數據,也可以根據成員方法返回數組中某個下標的值?

class MyArray {
    //可以存放任何類型的話 定義一個Object數組
    public Object[] array = new Object[10];

    //pos放入的位置 val存放的數據
    public void set(int pos, Object val) {
        array[pos] = val;
    }

    //獲取數據
    public Object get(int pos) {
        return array[pos];
    }

}

但是這樣寫的話需要強轉類型

談談包裝類與泛型

?那么怎么解決呢?

這就不得不提出泛型了


泛型的語法與使用

class 泛型類名稱<類型形參列表> {
// 這里可以使用類型參數
}

談談包裝類與泛型


?作用:

1. 泛型是將數據類型參數化,進行傳遞

2. 使用 <T> 表示當前類是一個泛型類。

3. 泛型目前為止的優(yōu)點:數據類型參數化,編譯時自動進行類型檢查和轉換

這樣(代碼體現)就能解決上面的問題了(可以不用強制類型轉換)

class MyArray<T> {
    //可以存放任何類型的話 定義一個Object數組
    public Object[] array = new Object[10];

    //pos放入的位置 val存放的數據
    public void set(int pos, T val) {
        array[pos] = val;
    }

    //獲取數據
    public T get(int pos) {
        return (T)array[pos];
    }

}


//測試類中的main方法
public static void main(String[] args) {
    //<>里面只能放包裝類型
    MyArray<String> myArray1 = new MyArray<>();
        
    MyArray<Integer> myArray2 = new MyArray<>();
        
}

注意:不能new一個泛型類的數組 但是可以下面這樣寫(不推薦)

class MyArray<T> {

    public T[] array2 = new T[10]; //不能直接new(下面會解釋)

    public T[] array3 = (T[]) new Object[10];//不建議
    
}


泛型的編譯

擦除機制

通過命令:javap -c 查看字節(jié)碼文件,所有的T都是Object。在編譯的過程當中,將所有的T替換為Object這種機制,我們稱為:擦除機制。Java的泛型機制是在編譯級別實現的。編譯器生成的字節(jié)碼在運行期間并不包含泛型的類型信息。


提出問題:
1.那為什么,T[] ts = new T[5]; 是不對的,編譯的時候,替換為Object,不是相當于:Object[] ts = new Object[5]嗎?

這是因為在Java中,泛型類型擦除機制會將T轉換為Object,并且不支持創(chuàng)建泛型數組。

public class GenericArray<T> {
    private T[] array;

    public GenericArray(int size) {
        this.array = new T[size]; // 編譯錯誤
    }
}

上述代碼中,在使用new關鍵字創(chuàng)建GenericArray實例時,我們嘗試創(chuàng)建一個大小為size的泛型數組。但是,由于類型擦除機制,編譯器無法了解T的確切類型,因此無法創(chuàng)建泛型數組。


泛型的上界

語法:

談談包裝類與泛型

?實例:

談談包裝類與泛型

?這里的傳入的類型形參(E)必須是邊界(Number)的子類

求一個數組中的最大值想必大家都不陌生吧,那么大家看看下面的代碼,為什么報錯呢?

談談包裝類與泛型

?這里是因為呢,在編譯的時候T會被替換成Object,但是在Object類中沒有沒有實現比較的接口,因為它是引用類型,必須 . 一個比較的方法,也得讓T實現比較的接口。代碼如下:

//這里extends是擴展的意思 不是繼承的意思
class Alg<T extends Comparable<T>> {

    public T findMax(T[] array) {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(array[i].compareTo(max) > 0) {
                max = array[i];
            }
        }
        return max;
    }

}

泛型方法

語法:

談談包裝類與泛型

示例:文章來源地址http://www.zghlxwxcb.cn/news/detail-458350.html

    //泛型方法 返回值為T類型
    public static <T> T swap() {
        
    }

到了這里,關于談談包裝類與泛型的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基本數據類型和包裝類型 使用規(guī)范

    基本數據類型和包裝類型 使用規(guī)范

    自動裝箱(Autoboxing)和拆箱(Unboxing)是Java中用于在基本數據類型和其對應的包裝類型之間進行轉換的機制。這兩種機制的目的是使代碼更簡潔和易讀,同時提供類型安全性。 1、自動裝箱:將基本數據類型的值自動封裝成相應的包裝類型對象。例如,將 int 轉換為 Integer,將

    2024年02月09日
    瀏覽(21)
  • JAVA包裝類和基本數據類型------JAVA入門基礎教程

    public class WrapperTest { ? ? public static void main(String[] args) ? ? { ? ? ? ? int i1 = 10; ? ? ? ? Integer i11 = new Integer(i1); ? ? ? ? System.out.println(i11); ? ? ? ? float f1 = 12.3F; ? ? ? ? f1 = 32.2F; ? ? ? ? Float ff1 = new Float(f1); ? ? ? ? System.out.println(ff1); ? ? ? ? String s1 = \\\"32.1\\\"; ? ? ? ? F

    2024年02月02日
    瀏覽(24)
  • == 和 equles()基于字符串、基本數據類型、包裝類應用的不同和原理

    == 和 equles()基于字符串、基本數據類型、包裝類應用的不同和原理

    對于 == 和 equals() 大家都很熟悉,大多也知道結論,但是運用的時候,有時候根據結論來,完全是摸不著頭腦,所以我在這系統(tǒng)的簡述一下關于兩者在基本數據類型、字符串類型、包裝類這三個應用上的區(qū)別。 下面我主要是說 == 的運用,因為equals()對于字符串就是比較內容,

    2024年03月19日
    瀏覽(32)
  • kotlin學習(一)基本概念、數據對象類型、控制流程、空值檢驗、類與接口

    kotlin學習(一)基本概念、數據對象類型、控制流程、空值檢驗、類與接口

    kotlin與java語言一樣,編譯成字節(jié)碼后,在JVM虛擬機中運行。kotlin語言的特性依賴于kotlin的語法編譯器。與kotlin類似的語言還有: Scala:大數據領域開發(fā)語言 Groovy:基于 JVM 平臺的動態(tài)腳本語言, 在安卓開發(fā)中用來編寫依賴關系、插件等 2019年谷歌宣布Kotlin成為安卓第一開發(fā)語

    2024年02月09日
    瀏覽(38)
  • 【數據結構】復雜度&包裝&泛型

    目錄 1.時間和空間復雜度 1.1時間復雜度 1.2空間復雜度 2.包裝類 2.1基本數據類型和對應的包裝類 2.2裝箱和拆箱 //阿里巴巴面試題 3.泛型 3.1擦除機制? 3.2泛型的上界 定義 :一個算法所花費的時間與其語句的執(zhí)行次數成正比,算法中的基本操作的 執(zhí)行次數 ,為算法的時間復雜

    2024年02月03日
    瀏覽(20)
  • 第五章 基本引用類型(下)——原始值包裝類型、

    第五章 基本引用類型(下)——原始值包裝類型、

    5.3 原始值包裝類型 ????????為了方便操作原始值,ECMAScript提供了3種特殊的引用類型:Boolean、Number和String。這些類型具有本章介紹的其他引用類型一樣的特點,但也具有與各自原始類型對應的特殊行為。每當用到某個原始值的方法或屬性時,后臺都會創(chuàng)建一個相應原始包

    2024年01月16日
    瀏覽(27)
  • 數據結構(Java實現)-包裝類和泛型

    數據結構(Java實現)-包裝類和泛型

    包裝類 在Java中,由于基本類型不是繼承自Object,為了在泛型代碼中可以支持基本類型,Java給每個基本類型都對應了 一個包裝類型。 基本數據類型和對應的包裝類 裝箱和拆箱 裝箱操作,新建一個 Integer 類型對象,將 i 的值放入對象的某個屬性中 拆箱操作,將 Integer 對象中

    2024年02月11日
    瀏覽(23)
  • 第十三章,枚舉與泛型例題

    第十三章,枚舉與泛型例題

    例題1 結果 ? 例題2 結果 ? 例題3 結果? ? ?例題4 結果 例題5 ?結果 例題6 ?結果 例題7 ?結果 例題8 ?結果

    2024年02月06日
    瀏覽(31)
  • C++——模板初階與泛型編程

    C++——模板初階與泛型編程

    ??作者簡介: 花想云 ,在讀本科生一枚,致力于 C/C++、Linux 學習。 ?? 本文收錄于 C++系列 ,本專欄主要內容為 C++ 初階、C++ 進階、STL 詳解等,專為大學生打造全套 C++ 學習教程,持續(xù)更新! ?? 相關專欄推薦: C語言初階系列 、 C語言進階系列 、 數據結構與算法 本章我們

    2023年04月17日
    瀏覽(13)
  • Java 中有了基本類型為什么還需要包裝類?

    Java 中有8種基本數據類型,這些基本類型又都有對應的包裝類。 分類 基本數據類型 包裝類 布爾型 boolean Boolean 整型 byte Byte short Short int Integer long Long 字符型 char Character 浮點型 float Float double Double 因為 Java 是一種面向對象語言,很多地方都需要使用對象而不是基本數據類型。

    2024年02月14日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包