官术网_书友最值得收藏!

4.2.1 數(shù)值類型包裝

方法的出現(xiàn)緣于優(yōu)化代碼結(jié)構(gòu),但它的意義并不局限于此,正因?yàn)橛辛朔椒ǘx,編程語言才更像一門能夠解決實(shí)際問題的工具,而不僅僅是用于加減乘除的計算器。在數(shù)學(xué)的發(fā)展過程中,為了表示四則運(yùn)算,人們創(chuàng)造了加減乘除符號,對應(yīng)Java編程的“+”“-”“*”和“/”。但是隨著運(yùn)算類型的增多,新的運(yùn)算符號來不及創(chuàng)造了,于是出現(xiàn)了函數(shù)形式的運(yùn)算操作,譬如三角函數(shù)sin、cos等。這種數(shù)學(xué)函數(shù)就是方法的雛形,對于三角函數(shù)來說,弧度類似方法的輸入?yún)?shù),而函數(shù)值類似方法的輸出參數(shù)。

自從有了方法,大部分的數(shù)學(xué)計算都可以使用方法來表達(dá),不過基本數(shù)值類型如int、long等由于設(shè)計上的緣故,它們的變量并不能直接調(diào)用方法。因此,Java另外為基本類型定義了對應(yīng)的包裝類型,通過包裝變量才能調(diào)用相關(guān)的算術(shù)方法。表4-1是基本數(shù)值類型與包裝數(shù)值類型的關(guān)系說明。

表4-1 基本類型與包裝類型的對照關(guān)系

包裝類型與基本類型一樣,首先要聲明包裝變量,然后對該變量賦值。給包裝變量賦值(或稱初始化)有3種方式,分別介紹如下:

(1)直接通過等號把具體數(shù)字賦值給包裝變量,代碼示例如下:

        // 初始化包裝變量的第一種方式:直接用等號賦值
        Integer oneInteger=1;

(2)調(diào)用Integer的valueOf方法完成指定數(shù)字的賦值,這里可將Integer換成該數(shù)字想要表達(dá)的包裝類型,具體賦值代碼如下:

        // 初始化包裝變量的第二種方式:調(diào)用包裝類型的valueOf方法
        Integer oneInteger=Integer.valueOf(1);

(3)使用關(guān)鍵字new創(chuàng)建新的包裝變量,形如“new包裝類型名稱(具體數(shù)字)”。下面是該方式的賦值代碼例子:

        // 初始化包裝變量的第三種方式:使用關(guān)鍵字new創(chuàng)建新變量
        Integer oneInteger=new Integer(1);

包裝變量的初始化方式為什么這么多呢?仿佛孔乙己號稱茴香豆的茴字有4種寫法。其實(shí)無論是設(shè)計師還是程序員,大家都是人,有的喜歡簡單點(diǎn),有的希望嚴(yán)謹(jǐn)點(diǎn),有的邋里邋遢,有的循規(guī)蹈矩,所謂蘿卜青菜各有所愛,眾口難調(diào)罷了。所以給包裝變量賦值的寫法只好一一照顧眾人的口味,既有簡單直白的寫法,又有意思明了的寫法,還有面向?qū)ο蟮膶懛ǎ傆幸豢钸m合你。

既然可以把基本類型的變量直接賦值給包裝變量,那么反過來能否直接將包裝變量賦值給基本變量呢?很遺憾這個操作是不允許的,并且不能使用基本類型之間的強(qiáng)制類型轉(zhuǎn)換,只能通過指定方法獲得對應(yīng)的基本變量數(shù)值。例如,要想把包裝變量賦值給整型變量,則需調(diào)用該包裝變量的intValue方法。以此類推,從包裝變量獲取字節(jié)數(shù)值、短整數(shù)值、長整數(shù)值、浮點(diǎn)數(shù)值、雙精度數(shù)值,就得分別調(diào)用包裝變量的byteValue方法、shortValue方法、longValue方法、floatValue方法、doubleValue方法。下面是將包裝變量賦值給各種基本類型變量的代碼例子(完整代碼見本章源碼的src\com\method\pack\PackNumber.java):

        Integer oneInteger=1;  // 初始化包裝變量的第一種方式:直接用等號賦值
        System.out.println("oneInteger="+oneInteger);
        // 把包裝變量轉(zhuǎn)換成字節(jié)變量,需要調(diào)用包裝變量的byteValue方法
        byte oneByte=oneInteger.byteValue();          //把包裝變量轉(zhuǎn)換成字節(jié)變量
        System.out.println("oneByte="+oneByte);
        short oneShort=oneInteger.shortValue();          //把包裝變量轉(zhuǎn)換成短整變量
        System.out.println("oneShort="+oneShort);
        int oneInt=oneInteger.intValue();              //把包裝變量轉(zhuǎn)換成整型變量
        System.out.println("oneInt="+oneInt);
        long oneLong=oneInteger.longValue();          //把包裝變量轉(zhuǎn)換成長整變量
        System.out.println("oneLong="+oneLong);
        float oneFloat=oneInteger.floatValue();          //把包裝變量轉(zhuǎn)換成浮點(diǎn)變量
        System.out.println("oneFloat="+oneFloat);
        double oneDouble=oneInteger.doubleValue();      //把包裝變量轉(zhuǎn)換成雙精度變量
        System.out.println("oneDouble="+oneDouble);
主站蜘蛛池模板: 沧源| 宁强县| 弥渡县| 宁海县| 美姑县| 天柱县| 遂宁市| 广安市| 垦利县| 桦南县| 鞍山市| 阜城县| 尼玛县| 五河县| 宁海县| 娱乐| 雷波县| 元氏县| 镇原县| 安乡县| 新闻| 合川市| 彭泽县| 田阳县| 沿河| 平远县| 尚义县| 牡丹江市| 灵石县| 永福县| 永嘉县| 兰溪市| 阳西县| 宕昌县| 平遥县| 东乌珠穆沁旗| 宝丰县| 上思县| 大庆市| 漳浦县| 合肥市|