java 拆箱_Java自動裝箱拆箱

一、裝箱、拆箱定義

如果一個int型量被傳遞到需要一個Integer對象的地方,那么,編譯器將在幕后插入一個對Integer構造方法的調用,這就叫做自動裝箱。而如果一個Integer對象被放到需要int型量的地方,則編譯器將幕后插入一個隊intValue方法的調用,這就叫做自動拆箱。

public static voidmain(String[] args) {//裝箱

Integer i1 = Integer.valueOf(1);//自動裝箱

Integer i2 = 1;//默認執行valueOf(1);

System.out.println(i1 == i2);//true

//自動拆箱

int i3 =i1.intValue();int i4 =i2.intValue();

System.out.println(i3== i4);//true

//超出Integer的緩存范圍,不從私有靜態內部類IntegerCache的數組cache中獲得,通過new返回新對象

Integer i5 = 128;

Integer i6= -129;

Integer i5_1= 128;

Integer i6_1= -129;

System.out.println(i5== i5_1);//false

System.out.println(i6 == i6_1);//false

}

所以說,對于-127~127之間的值,Integer對象中存在一個IntegerCache的私有靜態內部類,這個內部類有一個Integer類型的靜態常量數組,在這個內部類中通過靜態方法塊,初始化了這個靜態常量數組。默認這個數組保存[-127,128)之間的Integer對象。源碼如下:

1 private static classIntegerCache {2 static final int low = -128;3 static final inthigh;4 static finalInteger cache[];5

6 static{7 //high value may be configured by property

8 int h = 127;9 String integerCacheHighPropValue =

10 sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");11 if (integerCacheHighPropValue != null) {12 try{13 int i =parseInt(integerCacheHighPropValue);14 i = Math.max(i, 127);15 //Maximum array size is Integer.MAX_VALUE

16 h = Math.min(i, Integer.MAX_VALUE - (-low) -1);17 } catch( NumberFormatException nfe) {18 //If the property cannot be parsed into an int, ignore it.

19 }20 }21 high =h;22

23 cache = new Integer[(high - low) + 1];24 int j =low;25 for(int k = 0; k < cache.length; k++)26 cache[k] = new Integer(j++);27

28 //range [-128, 127] must be interned (JLS7 5.1.7)

29 assert IntegerCache.high >= 127;30 }31

32 privateIntegerCache() {}33 }

通過下面的源碼可以知道,為什么Integer i = 128;與Integer y = 128;,通過==比較的結果為false。如果要賦值的int變量在范圍內,則返回數組中的對象給Integer,如果不在,則通過帶參構造方法,new一個新的Integer對象。

1 public static Integer valueOf(inti) {2 if (i >= IntegerCache.low && i <=IntegerCache.high)3 return IntegerCache.cache[i + (-IntegerCache.low)];4 return newInteger(i);5 }

二、其它包裝類型

The Java Language Specification, 3rd Edition 寫道:

為了節省內存,對于下列包裝對象的兩個實例,當它們的基本值相同時,他們總是==:

Boolean :全部緩存

Byte :全部緩存

Character : <=127緩存

Short : (-128,127)緩存

Long : (-128,127)緩存

Float : (沒有緩存)

Double : (沒有緩存)

其中Character的緩存源碼:

1   private static classCharacterCache {2 privateCharacterCache(){}3

4 static final Character cache[] = new Character[127 + 1];5

6 static{7 for (int i = 0; i < cache.length; i++)8 cache[i] = new Character((char)i);9 }10 }

其中Float沒有緩存,直接返回源碼:

1   public static Float valueOf(String s) throwsNumberFormatException {2 return newFloat(parseFloat(s));3 }

三、用處

除了包裝類提供了額外的方法外,當使用集合框架時,泛型為Object類型,所以如果聲明為List list...,則這樣是不行的,必須聲明為List list...。

四、存儲的位置

因為是對象,所以存儲在堆中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395126.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

我們如何使用CircleCI 2.0來構建Angular應用并將其部署到AWS S3

by Marius Lazar通過馬里烏斯拉扎爾(Marius Lazar) 我們如何使用CircleCI 2.0來構建Angular應用并將其部署到AWS S3 (How we used CircleCI 2.0 to build and deploy an Angular app to AWS S3) In today’s world, continuous integration and deployment (CI & CD) is a…

攜手助力新型智慧城市建設和科技創新發展

2017年5月9日&#xff0c;三門峽市政府與北京航天控制儀器研究所、溢思得瑞科技創新集團戰略合作協議簽約儀式舉行&#xff0c;共同推動三門峽市新型智慧城市建設和科技創新發展。 市委書記劉南昌&#xff0c;市委常委、宣傳部部長呂挺琳&#xff0c;副市長李琳&#xff0c;市城…

在采用vue-cli Post Get

需要依賴插件 vue-resource npm install vue-resource --save https://cn.vuejs.org/v2/cookbook/using-axios-to-consume-apis.html 采用axios一樣可以取數值 new Vue({ el: #app, data () { return { info: null } }, mounted () { axios .get(https://api.coindesk.com/v1/b…

優秀的開源項目C_適合提高C/C++、網絡編程能力的開源項目!不要錯過,趕緊收藏...

我們學習每一個編程語言都是有一個項目實戰的過程&#xff0c;而對于開發類的編程語言&#xff0c;除了適當的做項目程序外&#xff0c;學習了解其他的開源項目更是一個關鍵&#xff0c;就比如我們的C/C編程語言的學習。前陣子有一個小伙伴就問到我&#xff0c;我學好C/C基礎后…

Opencv分水嶺算法——watershed自動圖像分割用法

分水嶺算法是一種圖像區域分割法&#xff0c;在分割的過程中&#xff0c;它會把跟臨近像素間的相似性作為重要的參考依據&#xff0c;從而將在空間位置上相近并且灰度值相近的像素點互相連接起來構成一個封閉的輪廓&#xff0c;封閉性是分水嶺算法的一個重要特征。 其他圖像分割…

單變量線性回歸模型_了解如何為單變量模型選擇效果最好的線性回歸

單變量線性回歸模型by Bjrn Hartmann比約恩哈特曼(BjrnHartmann) 找出哪種線性回歸模型最適合您的數據 (Find out which linear regression model is the best fit for your data) Inspired by a question after my previous article, I want to tackle an issue that often c…

java javax.xml.ws_如何通過javax.xml.ws.Service進行調用

在Eclipse中創建了一個新的標準java 7項目,并成功設法獲取javax.xml.ws.Service的實例,如下所示&#xff1a;String wsdlURL "http://example.com:3000/v1_0/foo/bar/SomeService?wsdl";String namespace "http://foo.bar.com/webservice";String servi…

漢能:讓人類像葉綠素一樣利用太陽能

6月初&#xff0c;一批在車筐里同時標識了摩拜“Mobike”和漢能“Hanergy”的摩拜單車在北京投入使用。這是由漢能與摩拜合作開發的第一批裝有漢能薄膜太陽能組件的共享單車。 這批共享單車所裝載的5.5瓦的漢能MiaSol的柔性薄膜太陽能組件&#xff0c;將為摩拜車載智能鎖中內置…

Java Annotation

一、了解注釋注釋是java1.5 jdk這后引入的特性。Java庫自己帶的注釋有Deprecated, Overwrite等。注釋是加在類&#xff0c;方法&#xff0c;變量等上的一種標記。并且&#xff0c;可以通過javaj反射操作把這個標記取出來。主要用途是用于對方法&#xff0c;變量&#xff0c;類等…

pycharm顯示全部數據_PyCharm第一次安裝及使用教程

pycharm簡介PyCharm是一種Python IDE&#xff0c;帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具&#xff0c;比如調試、語法高亮、Project管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外&#xff0c;該IDE提供了一些高級功能&#xff0c;以用…

UOJ #150 【NOIP2015】 運輸計劃

題目描述 公元 \(2044\) 年&#xff0c;人類進入了宇宙紀元。 \(L\) 國有 \(n\) 個星球&#xff0c;還有 \(n-1\) 條雙向航道&#xff0c;每條航道建立在兩個星球之間&#xff0c;這 \(n-1\) 條航道連通了 \(L\) 國的所有星球。 小 \(P\) 掌管一家物流公司&#xff0c; 該公司有…

css 屬性選擇器筆記

1、基本選擇器&#xff1a; eg&#xff1a; *{margin:0;padding:0}p{color:black}.content{background:red;}#intro{padding-left:2em;} 2、多元素組合選擇器 div p { color:#f00; }#nav li { display:inline; }#nav a { font-weight:bold; }div > strong { color:#f00; }h2…

scuba 報表_是否想了解JavaScript的for循環? 這個動畫的SCUBA潛水員可以提供幫助!...

scuba 報表by Kevin Kononenko凱文科諾年科(Kevin Kononenko) 是否想了解JavaScript的for循環&#xff1f; 這個動畫的SCUBA潛水員可以提供幫助&#xff01; (Want to learn about JavaScript’s for loops? This animated SCUBA diver can help!) For loops can be tough to…

力扣——尋找兩個有序數組的中位數

給定兩個大小為 m 和 n 的有序數組 nums1 和 nums2。 請你找出這兩個有序數組的中位數&#xff0c;并且要求算法的時間復雜度為 O(log(m n))。 你可以假設 nums1 和 nums2 不會同時為空。 示例 1: nums1 [1, 3] nums2 [2]則中位數是 2.0示例 2: nums1 [1, 2] nums2 [3, 4]…

uva-10152-烏龜排序

uva-10152-烏龜排序 求從待排序的到期望的順序的最小操作順序,只能進行一個操作,將當前的烏龜拿出來,上面的下移,拿出來的放到最上面 發現voj沒有PE, 解題方法,把倆個串反過來使用,從期望的順序到待排序的順序. AC:170ms #include <iostream> #include<stdio.h> #i…

筆記本win10玩紅警黑屏_【買筆記本電腦差評真的有參考意義?】

每次推薦筆記本電腦都會遇到一個重要的問題就是&#xff1a;“大多數消費者會下意識的去看京東評論&#xff0c;參考買的人是怎么說的&#xff0c;往往會出現不懂電腦的人繼續誤導不懂的人&#xff0c;導致越來越多的人被誤導”本文聊聊關于京東評論究竟有沒有參考價值。1&…

2.sed命令

2.sed命令 sed基本用法&#xff1a; sed: Stream EDitor 行編輯器 (全屏編輯器: vi) sed: 模式空間 默認不編輯原文件&#xff0c;僅對模式空間中的數據做處理&#xff1b;而后&#xff0c;處理結束后&#xff0c;將模式空間打印至屏幕&#xff1b; sed [options] AddressComma…

因此,您是一名新軟件工程師。 讓我們面對一些事實,揭穿一些神話。

by Trey Huffine通過Trey Huffine 因此&#xff0c;您是一名新軟件工程師。 讓我們面對一些事實&#xff0c;揭穿一些神話。 (So you’re a new Software Engineer. Let’s face some facts and debunk some myths.) When we’re learning to become software engineers, we’…

java前端接收回顯圖片_圖片上傳并回顯后端篇

圖片上傳并回顯后端篇我們先看一下效果繼上一篇的圖片上傳和回顯&#xff0c;我們來實戰一下圖片上傳的整個過程&#xff0c;今天我們將打通前后端&#xff0c;我們來真實的了解一下&#xff0c;我們上傳的文件&#xff0c;是以什么樣的形式上傳到服務器&#xff0c;難道也是一…

關于scanf和cin的大數據讀入效率

關于scanf和cin的大數據讀入效率好多大佬都說scanf的讀入效率比cin高&#xff0c;我也當練手&#xff0c;用書上的程序用了個測試&#xff0c;程序如下&#xff1a;#include<iostream>#include<ctime>#include<cstdio>#include<windows.h>using namesp…