国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java? 教程(自動(dòng)裝箱和拆箱)

cuieney / 2138人閱讀

自動(dòng)裝箱和拆箱

自動(dòng)裝箱是Java編譯器在基元類型和相應(yīng)的對象包裝類之間進(jìn)行的自動(dòng)轉(zhuǎn)換,例如,將int轉(zhuǎn)換為Integer,將double轉(zhuǎn)換為Double,依此類推,如果轉(zhuǎn)換是另一種方式,則稱為拆箱。

以下是自動(dòng)裝箱的最簡單示例:

Character ch = "a";

本節(jié)中的其余示例使用泛型,如果您還不熟悉泛型的語法,請參閱泛型課程。

考慮以下代碼:

List li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(i);

雖然你將int值作為基本類型而不是Integer對象添加到li,但代碼會(huì)進(jìn)行編譯,因?yàn)?b>li是Integer對象的列表,而不是int值列表,你可能想知道為什么Java編譯器不會(huì)發(fā)出編譯時(shí)錯(cuò)誤,編譯器不會(huì)生成錯(cuò)誤,因?yàn)樗鼜?b>i創(chuàng)建一個(gè)Integer對象并將該對象添加到li,因此,編譯器在運(yùn)行時(shí)將前面的代碼轉(zhuǎn)換為以下代碼:

List li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(Integer.valueOf(i));

將原始值(例如int)轉(zhuǎn)換為相應(yīng)包裝類(Integer)的對象稱為自動(dòng)裝箱,Java編譯器應(yīng)用自動(dòng)裝箱,當(dāng)原始值是:

作為參數(shù)傳遞給期望相應(yīng)包裝類的對象的方法。

分配給相應(yīng)包裝類的變量。

考慮以下方法:

public static int sumEven(List li) {
    int sum = 0;
    for (Integer i: li)
        if (i % 2 == 0)
            sum += i;
        return sum;
}

因?yàn)橛鄶?shù)()和一元加號(hào)(+=)運(yùn)算符不適用于Integer對象,你可能想知道為什么Java編譯器編譯該方法而不發(fā)出任何錯(cuò)誤,編譯器不會(huì)生成錯(cuò)誤是因?yàn)樗谶\(yùn)行時(shí)調(diào)用intValue方法將Integer轉(zhuǎn)換為int

public static int sumEven(List li) {
    int sum = 0;
    for (Integer i : li)
        if (i.intValue() % 2 == 0)
            sum += i.intValue();
        return sum;
}

將包裝類型(Integer)的對象轉(zhuǎn)換為其對應(yīng)的原始(int)值稱為拆箱,Java編譯器應(yīng)用拆箱,當(dāng)包裝類的對象是:

作為參數(shù)傳遞給期望相應(yīng)基元類型的值的方法。

分配給相應(yīng)基元類型的變量。

Unboxing示例顯示了其工作原理:

import java.util.ArrayList;
import java.util.List;

public class Unboxing {

    public static void main(String[] args) {
        Integer i = new Integer(-8);

        // 1. Unboxing through method invocation
        int absVal = absoluteValue(i);
        System.out.println("absolute value of " + i + " = " + absVal);

        List ld = new ArrayList<>();
        ld.add(3.1416);    // Π is autoboxed through method invocation.

        // 2. Unboxing through assignment
        double pi = ld.get(0);
        System.out.println("pi = " + pi);
    }

    public static int absoluteValue(int i) {
        return (i < 0) ? -i : i;
    }
}

該程序打印以下內(nèi)容:

absolute value of -8 = 8
pi = 3.1416

自動(dòng)裝箱和拆箱使開發(fā)人員可以編寫更清晰的代碼,使其更易于閱讀,下表列出了原始類型及其相應(yīng)的包裝類,Java編譯器使用這些類進(jìn)行自動(dòng)裝箱和拆箱:

原始類型 包裝類
boolean Boolean
byte Byte
char Character
float Float
int Integer
long Long
short Short
double Double
上一篇:StringBuilder類 下一篇:為什么要使用泛型?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/72903.html

相關(guān)文章

  • int和Integer深入分析

    摘要:對象頭的另外一部分是類型指針,即對象指向它的類元數(shù)據(jù)的指針,虛擬機(jī)通過這個(gè)指針來確定這個(gè)對象是哪個(gè)類的實(shí)例。并不是所有的虛擬機(jī)實(shí)現(xiàn)都必須在對象數(shù)據(jù)上保留類型指針,換句話說,查找對象的元數(shù)據(jù)信息并不一定要經(jīng)過對象本身,這點(diǎn)將在節(jié)討論。 目錄介紹 1.關(guān)于int和Integer的問題區(qū)別分析 2.Integer的值緩存的原理 2.1 Java 5 中引入緩存特性 2.2 Intege...

    Half 評論0 收藏0
  • Java? 教程(字符)

    字符 大多數(shù)情況下,如果使用單個(gè)字符值,則將使用原始char類型,例如: char ch = a; // Unicode for uppercase Greek omega character char uniChar = u03A9; // an array of chars char[] charArray = { a, b, c, d, e }; 但是,有時(shí)候需要使用字符作為對象 — 例如...

    lscho 評論0 收藏0
  • 深入淺出了解“裝箱拆箱

    摘要:本章部分內(nèi)容從源碼中解讀一些自動(dòng)裝箱與拆箱的原理,以及會(huì)出現(xiàn)的一些陷阱已經(jīng)性能等。例題分析我們通過幾個(gè)經(jīng)典的問題,來看看大家到底理解了裝箱與拆箱的知識(shí)點(diǎn)沒。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190426221918208.pn...

    FullStackDeveloper 評論0 收藏0
  • Java 8怎么了之二:函數(shù)和原語

    摘要:本文主要介紹了中的函數(shù)與原語,由國內(nèi)管理平臺(tái)編譯呈現(xiàn)。原語與對象語言毫無關(guān)系。對象函數(shù)有個(gè)方法叫,返回?cái)?shù)字化原語的方法被稱為,或。你可以創(chuàng)建函數(shù)的特殊形式,使用原語,而不是對象。 【編者按】本文作者為專注于自然語言處理多年的 Pierre-Yves Saumont,Pierre-Yves 著有30多本主講 Java 軟件開發(fā)的書籍,自2008開始供職于 Alcatel-Lucent 公...

    asoren 評論0 收藏0

發(fā)表評論

0條評論

cuieney

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<