精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 中為什么設計了包裝類

開發 后端
在 Java 中,萬物皆對象,所有的操作都要求用對象的形式進行描述。但是 Java 中除了對象(引用類型)還有八大基本類型,它們不是對象。

[[384127]]

本文轉載自微信公眾號「飛天小牛肉」,作者飛天小牛肉。轉載本文請聯系飛天小牛肉公眾號。

全文脈絡思維導圖如下:

 

1. 為什么需要包裝類

在 Java 中,萬物皆對象,所有的操作都要求用對象的形式進行描述。但是 Java 中除了對象(引用類型)還有八大基本類型,它們不是對象。那么,為了把基本類型轉換成對象,最簡單的做法就是「將基本類型作為一個類的屬性保存起來」,也就是把基本數據類型包裝一下,這也就是包裝類的由來。

這樣,我們先自己實現一個簡單的包裝類,以包裝基本類型 int 為例:

  1. // 包裝類 MyInt 
  2. public class MyInt { 
  3.     private int number; // 基本數據類型 
  4.      
  5.     public Int (int number){ // 構造函數,傳入基本數據類型 
  6.         this.number = number; 
  7.     } 
  8.      
  9.     public int intValue(){ // 取得包裝類中的數據 
  10.         return this.number; 
  11.     } 

測試一下這個包裝類:

  1. public static void main(String[] args) { 
  2.     MyInt temp = new Int(100); // 100 是基本數據類型, 將基本數據類型包裝后成為對象 
  3.     int result = temp.intValue(); // 從對象中取得基本數據類型 
  4.     System.out.println(result); 

當然,我們自己實現的這個包裝類非常簡單,Java 給我們提供了更完善的內置包裝類:

基本類型 對應的包裝類(位于 java.lang 包中)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

前 6 個類派生于公共的超類 Number,而 Character 和 Boolean 是 Object 的直接子類。

來看看包裝類的聲明,以 Integer 為例:

 

被 final 修飾,也就是說 Java 內置的「包裝類是無法被繼承的」。

2. 裝箱與拆箱

OK,現在我們已經知道了,存在基本數據類型與其對應的包裝類,那么,他們之間互相的轉換操作就稱為裝箱與拆箱:

  • 裝箱:將基本數據類型轉換成包裝類(每個包裝類的構造方法都可以接收各自數據類型的變量)
  • 拆箱:從包裝類之中取出被包裝的基本類型數據(使用包裝類的 xxxValue 方法)

下面以 Integer 為例,我們來看看 Java 內置的包裝類是如何進行拆裝箱的:

  1. Integer obj = new Integer(10);  // 自動裝箱 
  2. int temp = obj.intValue();   // 自動拆箱 

可以看出,和上面我們自己寫的包裝類使用方式基本一樣,事實上,Integer 中的這兩個方法其底層實現和我們上述寫的代碼也是差不多的。

 

不知道各位發現沒,value 被聲明為 final 了,也就是說「一旦構造了包裝器,就不允許更改包裝在其中的值」。

另外,需要注意的是,這種形式的代碼是 「JDK 1.5 以前」的!!!「JDK 1.5 之后」,Java 設計者為了方便開發提供了「自動裝箱」與「自動拆箱」的機制,并且可以直接利用包裝類的對象進行數學計算。

還是以 Integer 為例我們來看看自動拆裝箱的過程:

  1. Integer obj = 10;   // 自動裝箱. 基本數據類型 int -> 包裝類 Integer 
  2. int temp = obj;   // 自動拆箱. Integer -> int 
  3. obj ++; // 直接利用包裝類的對象進行數學計算 
  4. System.out.println(temp * obj);  

看見沒有,基本數據類型到包裝類的轉換,不需要像上面一樣使用構造函數,直接 = 就完事兒;同樣的,包裝類到基本數據類型的轉換,也不需要我們手動調用包裝類的 xxxValue 方法了,直接 = 就能完成拆箱。這也是將它們稱之為自動的原因。

 

我們來看看這段代碼反編譯后的文件,底層到底是什么原理:

  1. Integer obj = Integer.valueOf(10); 
  2. int temp = obj.intValue(); 

可以看見,自動裝箱的底層原理是調用了包裝類的 valueOf 方法,而自動拆箱的底層調用了包裝類的 intValue() 方法。

3. 不簡單的 Integer.valueOf

我們上面已經看過了用于自動拆箱的 intValue 方法的源碼,非常簡單。接下來咱來看看用于自動裝箱的 valueOf,其他包裝類倒沒什么好說的,不過 Integer 中的這個方法還是有點東西的:

 

IntegerCache 又是啥,點進去看看:

 

IntegerCache 是 Integer 類中的靜態內部類,綜合這兩段代碼,我們大概也能知道,IntegerCache 其實就是個「緩存」,其中定義了一個緩沖區 cache,用于存儲 Integer 類型的數據,「緩存區間是 [-128, 127]」。

回到 valueOf 的源碼:它首先會判斷 int 類型的實參 i 是否在可緩存區間內,如果在,就直接從緩存 IntegerCache 中獲取對應的 Integer 對象;如果不在緩存區間內,則會 new 一個新的 Integer 對象。

結合這個特性,我們來看一個題目,兩種類似的代碼邏輯,但是卻得到完全相反的結果。:

  1. public static void main(String args[]) { 
  2.     Integer a1 = 127; 
  3.     Integer a2 = 127; 
  4.     System.out.println(a1 == a2); // true 
  5.  
  6.     Integer b1 = 128; 
  7.     Integer b2 = 128; 
  8.     System.out.println(b1 == b2); // false 

我們知道,== 擁有兩種應用場景:

  • 對于引用類型來說,判斷的是內存地址是否相等
  • 對于基本類型來說,判斷的是值是否相等

從 a1 開始看,由于其值在 InterCache 的緩存區間內,所以這個 Integer 對象會被存入緩存。而在創建 a2 的時候,由于其值和 a1 相等,所以直接從緩存中取出值為 127 的 Integer 對象給 a2 使用,也就是說,a1 和 a2 這兩個 Integer 的對象引用都指向同一個地址。

 

對于 b1 和 b2 來說,由于 128 不在 IntegerCache 的緩存區間內,那就只能自己老老實實開辟空間了,所以 b1 和 b2 指向不同的內存地址。

很顯然,由于 InterCache 緩存機制的存在,可能會讓我們在編程的時候出現困惑,因此最好使用 .equals 方法來比較 Integer 值是否相等。Integer 重寫了 .equals 方法:

 

當然,其他包裝類雖然沒有緩存機制,但是也都重載了 .equals 方法,用于根據值來判斷是否相等。因此,得出結論,「使用 equals 方法來比較兩個包裝類對象的值」。

4. Object 類可以接收所有數據類型

綜上,有了自動拆裝箱機制,基本數據類型可以自動的被轉為包裝類,而 Object 是所有類的父類,也就是說,「Object 可以接收所有的數據類型了」(引用類型、基本類型)!!!

不信你可以試試,直接用 Object 類接收一個基本數據類型 int,完全是可以的。

  1. Object obj = 10; 
  2. int temp = (Integer) obj; 

解釋一下上面這段代碼發生了什么,下面這張圖很重要,大家仔細看:

 

5. 包裝類在集合中的廣泛使用

其實包裝類最常見的使用就是在集合中,因為集合不允許存儲基本類型的數據,只能存儲引用類型的數據。那如果我們想要存儲 1、2、3 這樣的基本類型數據怎么辦?舉個例子,我們可以如下聲明一個 Integer對象的數組列表:

  1. ArrayList<Integer> list = new ArrayList<>(); 

往這個列表中添加 int 型數據:

  1. list.add(3);  

上面這個調用在底層將會發生自動裝箱操作:

  1. int n = list.get(i); 

基本數據類型 int 會被轉換成 Integer 對象存入集合中。

我們再來從這個集合中根據某個下標 i 獲取對應的 Integer 對象,并用基本數據類型 int 接收:

int n = list.get(i);

上面這個調用在底層將會發生自動拆箱操作:

  1. int n = list.get(i).intValue(); 

6. 數據類型轉換

另外,除了在集合中的廣泛應用,包裝類還包含一個重要功能,那就是提供將String型數據變為基本數據類型的方法,使用幾個代表的類做說明:

Integer:

 

Double:

 

Boolean:

 

這些方法均被 static 標識,也就是說它們被各自對應的所有對象共同維護,直接通過類名訪問該方法。舉個例子:

String str = "10";int temp = Integer.parseInt(str);// String -> intSystem.out.println(temp * 2); // 20

需要特別注意的是:Character 類里面并不存在字符串變為字符的方法,因為 String 類中已經有一個 charAt()的方法可以根據索引取出字符內容。

 

責任編輯:武曉燕 來源: 飛天小牛肉
相關推薦

2020-06-27 09:01:53

Java包裝類編程語言

2024-12-26 07:41:47

Java類型ArrayList

2020-07-08 07:56:08

Java工具類包裝類

2017-02-27 15:19:04

2023-12-11 12:03:14

Python工具元組

2020-06-10 09:06:48

MongoDB架構高可用

2020-05-13 15:57:59

聚類分析算法監督學習

2023-07-23 17:19:34

人工智能系統

2024-06-24 07:58:00

2022-06-13 21:52:02

CDN網絡節點

2023-10-10 08:24:12

2021-10-11 09:32:40

包裝類型屬性

2021-09-14 08:50:38

Kubernetes容器Docker

2019-06-18 14:01:44

百度互聯網人工智能

2016-09-27 21:25:08

Go語言Ken Thompso

2022-06-07 08:39:35

RPCHTTP

2022-05-30 10:23:59

HTTPHTTP 1.1TCP

2019-03-11 08:36:11

Python代碼Flask

2015-07-09 14:05:11

Web Web設計

2020-09-16 06:51:37

Java線程JVM
點贊
收藏

51CTO技術棧公眾號

色爱综合区网| 五月婷婷激情网| www.成人在线视频| 中文无字幕一区二区三区| 国产精品嫩草视频| 欧美日韩综合一区二区| 婷婷综合成人| 欧美日韩国产首页| 亚洲精品蜜桃久久久久久| 国产高清美女一级毛片久久| 日本女人一区二区三区| 欧美黄色性视频| 在线观看日本黄色| 女人抽搐喷水高潮国产精品| 欧美日韩一级大片网址| 国产毛片视频网站| 国内外激情在线| www日韩大片| 51国产成人精品午夜福中文下载 | 国产一区99| 日韩三级av在线播放| 999在线免费视频| 黑森林国产精品av| 一区二区三区四区不卡在线 | 中文字幕免费在线播放| 欧美成人家庭影院| 色屁屁一区二区| 午夜免费福利小电影| 免费在线观看黄色| 国产欧美一区二区在线| 精品国产乱码久久久久久丨区2区 精品国产乱码久久久久久蜜柚 | 成人激情视频在线| 国产一卡二卡三卡| 翔田千里一区二区| 久久久久久久国产精品视频| 一级黄色片日本| 第一会所亚洲原创| 亚洲人高潮女人毛茸茸| 日韩Av无码精品| 超碰成人在线观看| 日韩欧美激情四射| 久久久久成人网| 先锋影音欧美| 国产尤物视频在线| 91色porny在线视频| 国产精品免费一区二区三区观看| 国产精品久久久久毛片| 卡一卡二国产精品| 国产精品久久久久免费a∨| 亚洲影院在线播放| 亚洲激情国产| 国内伊人久久久久久网站视频 | 欧美无人区码suv| 日韩中文字幕一区二区高清99| 欧美日本一区二区三区| 在线免费av播放| 免费视频观看成人| 在线视频欧美精品| 日日干夜夜操s8| 亚洲精品乱码日韩| 欧美电影一区二区| 中文字幕在线观看视频www| 精品伊人久久| 亚洲成人av片| 亚洲专区区免费| 精品久久不卡| 日韩三级影视基地| 欧美 日韩 国产 一区二区三区| 性xxxx欧美老肥妇牲乱| 成人444kkkk在线观看| 青青草原国产视频| 99国产精品视频免费观看一公开| 57pao成人国产永久免费| 日本高清不卡码| 青椒成人免费视频| 亚洲淫片在线视频| 色屁屁草草影院ccyycom| 97久久人人超碰| 日韩国产高清一区| 浪潮av一区| 午夜影院久久久| 黄色a级片免费| 青青草国产一区二区三区| 91精品国产美女浴室洗澡无遮挡| 真实乱偷全部视频| 亚洲肉体裸体xxxx137| 在线午夜精品自拍| 久久久久久久久久久久久久久久久| 亚洲激情在线| 国产精品一二区| 亚洲毛片欧洲毛片国产一品色| 91视频国产观看| 日日噜噜噜夜夜爽爽| heyzo在线播放| 欧美色窝79yyyycom| 激情av中文字幕| 精品国产精品| 欧美激情性做爰免费视频| 无码人妻丰满熟妇精品区| 麻豆国产一区二区| 精品中文字幕人| 黄色在线免费网站| 午夜久久福利影院| 日韩av.com| 色综合综合网| 久久久久久一区二区三区| 成人一级免费视频| 国产不卡免费视频| 亚洲精品二区| 亚洲精品福利电影| 日韩欧美色综合网站| 大吊一区二区三区| 香蕉亚洲视频| 国产伦理一区二区三区| 黄网站在线播放| 在线观看国产91| 超碰97人人干| 亚洲激情成人| 肥熟一91porny丨九色丨| 欧美被日视频| 在线观看日韩电影| 国产精品815.cc红桃| 一区视频在线看| 91精品国产一区二区三区动漫 | 自拍av一区二区三区| 日本精品久久久久中文字幕| 精品国产亚洲日本| 日韩一区二区在线视频| 亚洲欧美日韩激情| 99久久精品费精品国产一区二区| 亚洲高潮无码久久| 亚洲伦理网站| 日韩天堂在线视频| 中文字幕乱码人妻无码久久| 久久免费精品国产久精品久久久久 | 欧美体内she精高潮| 欧美hd在线| 国产精品久久久久77777| 青青草视频免费在线观看| 亚洲国产你懂的| 国产精品99精品无码视亚| 伊人久久大香线蕉综合四虎小说 | 国内自拍在线观看| 久久av国产紧身裤| 97不卡在线视频| 无码国产伦一区二区三区视频| 亚洲一级二级三级| 性高潮久久久久久| 精品9999| 玛丽玛丽电影原版免费观看1977 | 日韩欧美一区二区视频| 疯狂试爱三2浴室激情视频| 精品一区二区日韩| 国产又黄又爽免费视频| 韩国一区二区三区视频| 九九热在线精品视频| 精品国精品国产自在久不卡| 一区二区三区在线免费播放 | 国产影视一区二区| 亚洲欧美日韩中文播放| 亚洲成人福利视频| 亚洲福利一区| 免费久久一级欧美特大黄| 周于希免费高清在线观看| 日韩精品亚洲元码| 亚洲天堂男人av| 欧美激情一区在线观看| 污片在线免费看| 亚洲a一区二区三区| 99久久伊人精品影院| 多野结衣av一区| 亚洲欧美日韩另类| 在线观看免费高清视频| 亚洲女女做受ⅹxx高潮| zjzjzjzjzj亚洲女人| 亚洲一区欧美激情| 午夜精品一区二区三区在线观看| 日本成人在线网站| 久久久久久尹人网香蕉| 国产在线观看网站| 日韩一区二区三区观看| 偷偷操不一样的久久| 中文文精品字幕一区二区| 亚洲精品成人无码毛片| 亚洲综合不卡| 性欧美18一19内谢| 久久草在线视频| 国产日韩亚洲欧美| 国产免费拔擦拔擦8x高清在线人| 亚洲欧美一区二区精品久久久| 国产一区二区网站| 欧美日韩国产精品专区| 一本一本久久a久久| 成人蜜臀av电影| 亚洲免费一级视频| 激情视频一区| 亚洲欧洲免费无码| 激情小说一区| 91精品啪在线观看麻豆免费| 中文字幕成在线观看| 欧美成人精品不卡视频在线观看| 欧美精品少妇| 精品少妇一区二区三区视频免付费| 久久免费激情视频| 亚洲毛片av在线| 69精品无码成人久久久久久| 成人免费毛片aaaaa**| 亚洲欧美自拍另类日韩| 国产精品久久777777毛茸茸| 亚洲色婷婷久久精品av蜜桃| 国产探花在线精品一区二区| 国产二区不卡| 亚洲一区av| 国产精品r级在线| 97人澡人人添人人爽欧美| 日韩中文字幕视频在线| 日本免费不卡| 欧美mv和日韩mv国产网站| 国产精品高潮呻吟av| 色成年激情久久综合| 国产第一页在线播放| 综合婷婷亚洲小说| 亚洲ⅴ国产v天堂a无码二区| 91在线精品一区二区三区| 精品人妻人人做人人爽夜夜爽| 美女视频免费一区| 欧美精品第三页| 久久av在线| 97国产在线播放| 亚洲大胆av| 九九热只有这里有精品| 欧美在线黄色| 男女h黄动漫啪啪无遮挡软件| 成人免费av| 天天综合色天天综合色hd| 亚洲尤物av| 欧美一区二区三区在线免费观看| 欧美顶级毛片在线播放| 国产成人精品免费视频大全最热 | 久久久久久99| 欧美人妖视频| 麻豆av一区二区| 亚洲精品小区久久久久久| 国产在线一区二区三区欧美 | 一区二区欧美日韩| 日韩精品免费一区二区在线观看| 日韩一二三区不卡在线视频| 精品国产精品国产偷麻豆| 日本亚洲欧洲精品| 日韩一级毛片| 国产免费xxx| 欧美日韩亚洲一区在线观看| 丁香婷婷综合激情| 亚洲人体偷拍| 国产日产欧美视频| 视频在线观看一区| 奇米影视四色在线| 国产精品一区二区在线观看不卡| 久久aaaa片一区二区| 国产999精品久久久久久| v天堂中文在线| 久久综合久久久久88| 日本一级免费视频| 国产精品国产三级国产a | 粉嫩av一区二区三区免费野| 国产精品第5页| 欧美日韩一区二区在线观看 | 九七电影院97理论片久久tvb| 国产九九精品视频| 日韩视频一区二区三区四区| 国外成人在线视频网站| 美女精品一区最新中文字幕一区二区三区 | 国产精品系列视频| 欧美tickling挠脚心丨vk| 亚洲av电影一区| 在线电影av不卡网址| 黄色免费网站在线| 97成人在线视频| 成人影院在线免费观看| 91精品入口蜜桃| 亚欧日韩另类中文欧美| 一区二区欧美日韩| 亚洲经典三级| 国产精品嫩草影院8vv8| 本田岬高潮一区二区三区| 国产男男chinese网站| 国产精品久久久久久久久动漫 | 欧美狂野另类xxxxoooo| 亚洲美女综合网| 伊人伊人伊人久久| 国产羞羞视频在线播放| 国产精品久久久久久超碰| 精品视频在线观看免费观看| 精品无人区一区二区三区竹菊| 日本不卡高清| 欧美一区二区中文字幕| 青娱乐精品视频在线| 亚洲女人在线观看| 久久久久高清精品| 精品少妇久久久| 欧美另类videos死尸| 天堂91在线| 欧美二区乱c黑人| 日本精品裸体写真集在线观看| 福利精品视频| 婷婷丁香综合| 大香煮伊手机一区| eeuss影院一区二区三区| 99热6这里只有精品| 日本韩国一区二区三区视频| 免费的黄色av| 久久精品中文字幕| 精品免费av一区二区三区| 国产日韩久久| 欧美亚洲不卡| 欧美高清精品一区二区| 国产精品网站在线| 丁香社区五月天| 亚洲国产精品高清久久久| 污的网站在线观看| 91在线|亚洲| 99久久99热这里只有精品| 国产日产欧美视频| 97精品久久久久中文字幕| 久久久久免费看| 日韩欧美色综合网站| 成人video亚洲精品| 国产美女搞久久| 久久在线视频免费观看| 亚洲乱码国产一区三区| 久久综合av免费| 久久国产精品系列| 亚洲第一天堂av| 后进极品白嫩翘臀在线播放| 亚洲www在线观看| 亚洲成av人片乱码色午夜| 高清av免费看| 国产精品国产三级国产aⅴ入口| 这里只有精品999| 国产午夜精品免费一区二区三区| 中文字幕av一区二区三区佐山爱| 久草精品电影| 久久久精品午夜少妇| 五月婷婷综合在线观看| 欧美色图在线视频| 九色在线播放| 国产精品成人一区| 成人影院在线| 午夜视频在线网站| 亚洲精品久久久蜜桃| 性生交生活影碟片| 精品人伦一区二区三区蜜桃网站| 91xxx视频| 亚洲国产成人在线观看| 亚洲成a人v欧美综合天堂| www视频在线| 久久免费视频网站| 精品三级av| 能在线观看的av| 国产欧美精品一区二区三区四区 | 污污网站在线观看| 成人免费视频视频在| 91久久中文| 乐播av一区二区三区| 欧美人与性动xxxx| 欧洲在线视频| 欧洲亚洲一区二区| 麻豆精品一区二区| 精品无码一区二区三区电影桃花 | 国产精品亚洲产品| 日韩福利在线视频| 91精品国产综合久久久久久| 中文字幕资源网在线观看| 国模一区二区三区私拍视频| 日韩综合一区二区| 手机在线免费看片| 日韩高清人体午夜| 日日夜夜精品| 国产精品裸体瑜伽视频| 欧美激情中文字幕| 亚洲精品国产精| 日韩av免费在线| 综合国产精品| 欧美18—19性高清hd4k| 日韩一区二区三区视频在线 | 毛片av在线| 狠狠色综合一区二区| 久久精品国产99| 国产免费观看av| 久久精品国产一区| 色婷婷av一区二区三区丝袜美腿| 亚欧美在线观看| 欧美性色xo影院| 在线看一级片| 日日骚一区二区网站| 国产91对白在线观看九色| 日本妇乱大交xxxxx| 国内精品伊人久久| 一区二区三区在线电影| 公肉吊粗大爽色翁浪妇视频|