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

Java中包裝類介紹與其注意事項

 更新時間:2017年02月04日 10:27:21   作者:AllenWang  
Java語言是一個面向對象的語言,但是Java中的基本數(shù)據(jù)類型卻是不面向對象的,這在實際使用時存在很多的不便,所以在設計類時為每個基本數(shù)據(jù)類型設計了一個對應的類進行代表,這樣八個和基本數(shù)據(jù)類型對應的類統(tǒng)稱為包裝類,有些地方也翻譯為外覆類或數(shù)據(jù)類型類。

前言

大家都知道在Java中,除了8種基本數(shù)據(jù)類型外,其他的都是引用類型。使用引用類型是為了更好地貫徹面向對象的思想,那為什么還要保留8種基本數(shù)據(jù)類型呢?

這其實更多地是照顧程序員的習慣。為了既照顧程序員的習慣,同時又能全面貫徹面向對象編程的思想,Java中引入了包裝類機制。

所謂的包裝類就是為8種基本數(shù)據(jù)類型分別定義了相應的引用類型,其對應關系如下:

顯然,除了int及char外,其余的包裝類都是將對應的基本數(shù)據(jù)類型的首字母大寫即可。 那為什么要引入包裝類呢?前面已經(jīng)說過,是為了全面貫徹面向對象的編程思想,具體地說就是非引用類型的數(shù)據(jù)在使用時會有許多制約,比如List list=new ArrayList();對于引用類型,可直接使用list.add(obj);進行添加,但是對于基本數(shù)據(jù)類型則無法添加,從而不能使用ArrayList中的許多方法(如排序、刪除等),顯然會造成許多不便,而使用包裝類則可以很好地避免這種缺陷。

同時,從JDK 1.5開始提供了自動裝箱和自動拆箱的功能,因而目前可以有以下3種初始化包裝類的方法:

方法1:直接傳入相應的基本數(shù)據(jù)類型變量或常量,如

int a1=3;Integer a2=new Integer(a1);
Float f=new Float(3.14f);
Boolean b=new Boolean(true);

方法2:通過傳入字符串,如

Integer a=new Integer("3");
Float f=new Float("3.14");
Boolean b=new Boolean("true");

值得注意的是使用"True"也可以,如Boolean b=new Boolean(“True”);

方法3:通過自動裝箱功能,如Integer a=3;Float f=3.14f;Boolean b=true;值得注意的是可使用new Float(“3.14”)new Float(“3.14f”)這樣的語句來初始化Float類型變量,但是卻不能使用Float f=3.14;來初始化Float類型變量,因為3.14是double類型,它只能被自動裝箱為Double類型變量。

我們知道,引用類型使用==進行比較時,只有當二者指向同一個對象時,才會返回true,否則即使值相等也返回false.包裝類也屬于引用類型,所以以下代碼的執(zhí)行結果為false,

Float f1=new Float(3.14f);
Float f2=new Float(3.14f);
System.out.println(f1==f2);

但是,下面一段代碼的輸出結果卻和前面討論的不一樣,這是為什么呢?

import java.util.*;

public class TestWrapperClass
{
 public static void main(String[]args)
 {
 Integer t1=3;
 Integer t2=3;
 System.out.println(t1==t2);

 Integer t3=128;
 Integer t4=128;
 System.out.println(t3==t4);

 Boolean b1=true;
 Boolean b2=true;
 System.out.println(b1==b2);
 }
}

其輸出結果如下圖所示:

如果按照前面的討論,應該都輸出false才對,但這里t1與t2,b1與b2的比較結果卻為true.這不科學啊!

原來,Java為了獲得更高的執(zhí)行效率,在某些類的設計中引入了緩存機制!

此處的Integer及Boolean類的設計即是如此。java.lang.Integer類的部分源代碼如下所示:

static final Integer[]cache=new Integer[-(-128)+127+1];
static{
for(int i=0;i<cache.length;i++)
 cache[i]=new Integer[i-128);
}

顯然,系統(tǒng)把-128~127之間的整數(shù)裝箱成Integer實例,并通過cache數(shù)組進行緩存,所以只要是-128~127之間的Integer類型變量,其指向的對象都是cache數(shù)組成員,從而只要有兩個值相同且在-128~127之間的Integer變量,它們指向的對象就是同一個,故采用==進行比較時也返回true.Boolean的情形與之類似。

實際上,不只是在Java中,在Android中的一些類也采用了緩存機制,如Android中的ListView就是一個典型的例子,在繼承的方法getView中,convertView其實就是采用了緩存機制,從而大大節(jié)省了系統(tǒng)資源開支,加快了圖形渲染的速度。此處暫且不表,在后面還會再提到。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言留言交流。

相關文章

  • kotlin快速入門之標準函數(shù)與靜態(tài)方法

    kotlin快速入門之標準函數(shù)與靜態(tài)方法

    學完了Kotlin的基礎知識,是時候來來學習 Kotlin的標準函數(shù)和靜態(tài)方法了,下面這篇文章主要給大家介紹了關于kotlin快速入門之標準函數(shù)與靜態(tài)方法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • Java Calendar日歷類原理及使用方法

    Java Calendar日歷類原理及使用方法

    這篇文章主要介紹了Java Calendar日歷類原理及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • JavaWeb項目部署到服務器詳細步驟詳解

    JavaWeb項目部署到服務器詳細步驟詳解

    這篇文章主要介紹了JavaWeb項目如何部署到服務器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • JavaWeb如何實現(xiàn)限制單個賬號多處登錄

    JavaWeb如何實現(xiàn)限制單個賬號多處登錄

    這篇文章主要介紹了JavaWeb如何實現(xiàn)限制單個賬號多處登錄問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java自動生成ID號的方法

    java自動生成ID號的方法

    這篇文章主要介紹了java自動生成ID號的方法,涉及java生成ID號的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • springboot?vue項目管理后端實現(xiàn)接口新增

    springboot?vue項目管理后端實現(xiàn)接口新增

    這篇文章主要為大家介紹了springboot?vue項目管理后端實現(xiàn)接口新增,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java圖片處理開源框架Thumbnailator

    Java圖片處理開源框架Thumbnailator

    這篇文章主要為大家詳細介紹了Java圖片處理開源框架Thumbnailator的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • MyBatis中關于resultType和resultMap的區(qū)別介紹

    MyBatis中關于resultType和resultMap的區(qū)別介紹

    MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,那么MyBatis中關于resultType和resultMap的區(qū)別是什么呢?下面小編通過本文給大家解答下
    2016-09-09
  • 如何使用stream從List對象中獲取某列數(shù)據(jù)

    如何使用stream從List對象中獲取某列數(shù)據(jù)

    這篇文章主要介紹了如何使用stream從List對象中獲取某列數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • java調用opencv身份證號識別詳解

    java調用opencv身份證號識別詳解

    這篇文章主要為大家詳細介紹了java如何調用opencv實現(xiàn)身份證號的識別,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03

最新評論

绥中县| 静宁县| 阳新县| 吉林省| 徐闻县| 琼中| 汉中市| 安吉县| 平谷区| 金堂县| 江城| 宣汉县| 牟定县| 达日县| 凤冈县| 榆树市| 邯郸市| 正定县| 玉门市| 巴彦县| 民和| 读书| 凤冈县| 松江区| 乌拉特后旗| 渝中区| 泌阳县| 阳原县| 德惠市| 林州市| 汉阴县| 富锦市| 阳西县| 封丘县| 高雄县| 翁牛特旗| 宜阳县| 措勤县| 丰城市| 西乌珠穆沁旗| 沾益县|