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.mzph.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…