亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中包裝類介紹與其注意事項(xiàng)

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

前言

大家都知道在Java中,除了8種基本數(shù)據(jù)類型外,其他的都是引用類型。使用引用類型是為了更好地貫徹面向?qū)ο蟮乃枷耄菫槭裁催€要保留8種基本數(shù)據(jù)類型呢?

這其實(shí)更多地是照顧程序員的習(xí)慣。為了既照顧程序員的習(xí)慣,同時(shí)又能全面貫徹面向?qū)ο缶幊痰乃枷?,Java中引入了包裝類機(jī)制。

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

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

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

方法1:直接傳入相應(yīng)的基本數(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:通過自動(dòng)裝箱功能,如Integer a=3;Float f=3.14f;Boolean b=true;值得注意的是可使用new Float(“3.14”)new Float(“3.14f”)這樣的語句來初始化Float類型變量,但是卻不能使用Float f=3.14;來初始化Float類型變量,因?yàn)?.14是double類型,它只能被自動(dòng)裝箱為Double類型變量。

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

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

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

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

其輸出結(jié)果如下圖所示:

如果按照前面的討論,應(yīng)該都輸出false才對,但這里t1與t2,b1與b2的比較結(jié)果卻為true.這不科學(xué)??!

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

此處的Integer及Boolean類的設(shè)計(jì)即是如此。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實(shí)例,并通過cache數(shù)組進(jìn)行緩存,所以只要是-128~127之間的Integer類型變量,其指向的對象都是cache數(shù)組成員,從而只要有兩個(gè)值相同且在-128~127之間的Integer變量,它們指向的對象就是同一個(gè),故采用==進(jìn)行比較時(shí)也返回true.Boolean的情形與之類似。

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

總結(jié)

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

相關(guān)文章

  • Java面試最容易被刷的重難點(diǎn)之鎖的使用策略

    Java面試最容易被刷的重難點(diǎn)之鎖的使用策略

    鎖像synchronized同步塊一樣,是一種線程同步機(jī)制,但比Java中的synchronized同步塊更復(fù)雜。因?yàn)殒i(以及其它更高級(jí)的線程同步機(jī)制)是由synchronized同步塊的方式實(shí)現(xiàn)的,所以我們還不能完全擺脫synchronized關(guān)鍵字
    2021-10-10
  • Java中JUC包(java.util.concurrent)下的常用子類

    Java中JUC包(java.util.concurrent)下的常用子類

    相信大家已經(jīng)對并發(fā)機(jī)制中出現(xiàn)的很多的常見知識(shí)點(diǎn)進(jìn)行了總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中JUC包(java.util.concurrent)下的常用子類的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Spring?Data?JPA實(shí)現(xiàn)持久化存儲(chǔ)數(shù)據(jù)到數(shù)據(jù)庫的示例代碼

    Spring?Data?JPA實(shí)現(xiàn)持久化存儲(chǔ)數(shù)據(jù)到數(shù)據(jù)庫的示例代碼

    Spring Data JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套 JPA 應(yīng)?框架,可使開發(fā)者?極簡的代碼即可實(shí)現(xiàn)對數(shù)據(jù)庫的訪問和操作。本文我們來了解如何用Spring?Data?JPA框架實(shí)現(xiàn)數(shù)據(jù)持久化存儲(chǔ)到數(shù)據(jù)庫,感興趣的可以了解一下
    2022-04-04
  • 詳解Spring的StringUtils踩坑記錄

    詳解Spring的StringUtils踩坑記錄

    這篇文章主要介紹了詳解Spring的StringUtils踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的原理解析

    SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理的原理解析

    這篇文章主要介紹了SpringBoot2 整合Ehcache組件,輕量級(jí)緩存管理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

    這篇文章主要介紹了java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 一文詳解Java中Map和Set接口的使用方法

    一文詳解Java中Map和Set接口的使用方法

    Map和set是一種專門用來進(jìn)行搜索的容器或者數(shù)據(jù)結(jié)構(gòu),其搜索的效率與其具體的實(shí)例化子類有關(guān),可能在查找時(shí)進(jìn)行一些插入和刪除的操作,即動(dòng)態(tài)查找,那上述兩種方式就不太適合了,本節(jié)介紹的Map和Set是一種適合動(dòng)態(tài)查找的集合容器,需要的朋友可以參考下
    2024-08-08
  • IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署

    IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署

    這篇文章主要介紹了IDEA2021.2配置docker如何將springboot項(xiàng)目打成鏡像一鍵發(fā)布部署,本文圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解

    Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解

    這篇文章主要介紹了Java定時(shí)任務(wù)Timer、TimerTask與ScheduledThreadPoolExecutor詳解,  定時(shí)任務(wù)就是在指定時(shí)間執(zhí)行程序,或周期性執(zhí)行計(jì)劃任務(wù),Java中實(shí)現(xiàn)定時(shí)任務(wù)的方法有很多,本文從從JDK自帶的一些方法來實(shí)現(xiàn)定時(shí)任務(wù)的需求,需要的朋友可以參考下
    2024-01-01
  • Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例

    Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例

    本文主要介紹了Java使用html2image將html生成縮略圖圖片的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12

最新評論