Java中装箱与拆箱

JDK5.0 之后提供了一种新特性:自动装箱拆箱。

既然是装拆箱,那么我们先来看看这个所谓的“箱”:

java中的8种基本数据类型都有与之对应的封装类(封装类就是所谓的箱)。分别是:
byte short int long double float char bool
Byte Short Integer Long Double Float Character Boolean
这一点上一篇文章也提到了。

这里说句题外话:为什么要有封装类?因为java是面向对象的语言,一切皆对象。有些时候最好甚至必须使用对象,然而基本数据类型并不是对象,所以封装类便解决了这个问题,把基本数据类型封装到对应的封装类中成为一个对象。(注:JDK5.0之后才产生的封装类以及装箱拆箱等特性。)

装箱拆箱很形象的说明了这一操作的动作是怎样的。即:装箱就是把基本数据类型封装到箱子里(封装成与之对应的封装类而成为一个实例),拆箱就是把一个实例从箱子里拿出来。

在JDK5.0之前

1 Integer a = 1;

如果这样写是错误的(类型转换错误)。然而现在JVM会自动做一些必要的操作,使得上面的不用new关键字实例化Integer对象而是直接赋上一个常数的操作合理。好比把一件东西装到一个箱子里(封装类的对象),这就是自动装箱

反之:

1 Integer b = new Integer(1);
2 int c = b; 

把一个Integer的对象b直接赋值给int变量c,JVM默认会取出b的值赋给c,就好像从箱子里拿出一件东西给了谁谁谁,这就是自动拆箱。

而且不管是装箱还是拆箱,你都不必操心这是是怎么做的,JVM会搞定这些。换句话说,你只要知道可以这样赋值就好:Integer a = 1;。除非你想知其然亦知其所以然。其中:装箱操作默认调用的是Integer的静态方法valueOf,拆箱操作默认调用的是Integer的intValue方法。下面是jdk1.6.0_10文档中Integer类的源码:
valueOf:

1 public static Integer valueOf(int i){
2   final int offset = 128;
3   if (i >= -128 && i <= 127) { // must cache
4     return IntegerCache.cache[i + offset];
5   }
6   return new Integer(i);
7 }

intValue:

1 public int intValue(){
2     return value;
3 }

至于其中的IntegerCache,是因为JVM的优化和常量池技术,使得Integer类在用Integer a = 1; 这样的方式声明变量时,当赋予的值在-128-127之间时,会在实例化的同时将引用加入到常量池中以便以后的操作中可以从常量池中获取这个值,减少了资源的浪费,也减少了对内存的操作使系统速度相对快一些。

转载于:https://www.cnblogs.com/lipijin/archive/2013/05/08/3066657.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《c语言深度剖析》读书笔记

一、注意点 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 11、 二、问题 1、 2、 3、 4、 5、 6、 7、

位操作的细节

一、位操作符 &#xff08;1&#xff09;位与& 位与符号是一个&&#xff0c;两个&&是逻辑与。位与时两个操作数是按照二进制位彼次对应位相与的&#xff0c;逻辑与是两个操作数作为整体来相与的。&#xff08;举例&#xff1a;0xAA&0xF00xA0, 0xAA &&…

Android支付接入(五):机锋网

前边已经陆续跟大家走了一遍运营商和支付宝付费接入&#xff0c;今天跟大家一起看看机锋网的支付接入。事实上付费接入本身并没有太多须要注意的地方&#xff0c;做的多了以后你会发现套路都是大同小异的。而须要注意的地方在于怎么跟游戏兼容及后期的维护&#xff0c;包含增减…

内存的使用

内容整理于朱有鹏老师的课程。 1、冯诺依曼结构和哈佛结构 冯诺依曼结构是数据和代码放在一起&#xff0c;哈佛结构是数据和代码分开存在。什么是代码&#xff1a;函数。什么是数据&#xff1a;全局变量、局部变量。在S5PV210中运行的linux系统上&#xff0c;运行应用程序时&am…

java启动密码,java - 用户验证密码后如何启动java applet程序? - SO中文参考 - www.soinside.com...

我正在尝试连接两个简单的java程序&#xff0c;一个密码登录程序&#xff0c;然后打开第二个程序(一个非常简单的PrintWriter程序)。我是一个大型菜鸟&#xff0c;所以尝试将二级程序添加到密码程序中。显然这没用。我看到很多关于创建密码程序的条目&#xff0c;以及一些关于使…

WPF 中的换行符

WPF中UI上和后台代码中的换行符不同。 其中&#xff1a; XAML中为 C#代码中为 \r\n 或者&#xff1a; Environment.NewLine转载于:https://www.cnblogs.com/eric_ibm/archive/2013/05/09/WPF.html

matlab教程蚁群算法,蚁群算法怎样用MATLAB仿真

蚁群算法采用matlab开发的仿真平台&#xff1a;算法实现&#xff0c;路径显示&#xff0c;人机交互控制等希望对你有帮助&#xff01;是可以运行的% the procedure of ant colony algorithm for VRP%% % % % % % % % % % %%initialize the pa…

androidpn的一次亲密接触(二)

简单看了一下源码的实现&#xff0c;这里贴一点个人觉得比叫重要的代码。 XmppManager.java 构造方法&#xff1a;Java代码public XmppManager(NotificationService notificationService) 在这里主要是从共享引用中取得xmpp服务器地址和端口号、用户名和密码。 内部类Java代码…

指针知识学习[总]

printf("p %p.\n", p); // %p打印指针和%x打印指针&#xff0c;打印出的值是一样的 printf("p 0x%x.\n", p); 一、指针是什么&#xff1f; 1、指针变量和普通变量的区别 指针的实质就是个变量&#xff0c;它跟普通变量没有任何本质区别。指针完整的名字…

网络游戏性能测试的几点想法

进入游戏行业也有一段时间了&#xff0c;在日常的工作中对游戏的性能测试也产生了一些想法&#xff0c;因此写出来与大家讨论讨论。网络游戏行业现在越做越大&#xff0c;面也越来越广了&#xff0c;依我的观点主要分为以下几个方面&#xff1a;1、传统的c/s架构的网络游戏&…

mongodb java报授权,mongoDB 3.0用户创建与授权

选择数据库 use admin添加用户&#xff1a;db.createUser({user: "admin",pwd: "12345678",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})此命令创建的用户只有管理用户的权限&#xff0c;并没有操作数据库的权限。查看…

交换排序-经典的快速排序算法总结

时间复杂度&#xff0c;平均O&#xff08;nlogn&#xff09;&#xff0c;最坏O&#xff08;n)&#xff1b; 不稳定的算法 1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略&#xff0c;通常称其为分治法(Divide-and-ConquerMethod)。…

c语言数组问题解析

#import <Foundation/Foundation.h>#define COUNT 10int main(int argc, const char * argv[]){//1、随机产生20个[10 , 50]的正整数存到数组中&#xff0c;并求数组中的所有元素最大值、最小值、平均值以及各元素之和。第二大值。// int max 0, min 0, sum 0, sec…

指针学习2

主要是指针数组、数组指针、函数指针的学习&#xff0c;以及二重指针、二维数组的学习。 一、指针数组与数组指针 1、概念 指针数组的实质是一个数组&#xff0c;这个数组中存储的内容全部是指针变量。数组指针的实质是一个指针&#xff0c;这个指针指向的是一个数组。2、分析…

php excel 分页,excel分页线怎么增加

增加excel分页线的方法&#xff1a;首先依次点击“工作簿视图-分页预览”&#xff1b;然后点击要在其下方插入分页符的这一行&#xff1b;最后在“页面布局”选项卡上的“页面设置”组中&#xff0c;单击“分隔符”即可。本文操作环境&#xff1a;Windows7系统&#xff0c;Micr…

C# 中的委托和事件

PDF 浏览&#xff1a;http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代码在VS2005下通过&#xff0c;由于VS2003(.Net Framework 1.1)不支持隐式的委托变量&#xff0c;所以如果在一个接受委托类型的位置直接赋予方法名&#xff0c;在VS2003下会报…

DEBUG、void、NULL、C库和API、临时匿名变量、main函数

一、程序调试的debug宏 1、程序调试的常见方案 单步调试、裸机LED调试、打印信息、log文件 利用调试器进行单步调试&#xff08;譬如IDE中&#xff0c;Jlink&#xff09;适用于新手&#xff0c;最大的好处就是直观&#xff0c;能够帮助找到问题。缺点是限制性大、速度慢。裸机…

php7 有ext skel吗,PHP扩展开发系列02 - 老司机起步之函数

上一篇扩展开发引导文章中。创建了编写扩展的三个基本文件。或许你会有个疑问PHP没有类似的自动生成项目框架的工具吗&#xff1f; 当然有。这篇文章就开始介绍使用 "php-ext-cli" 工具来生成扩展项目文件注意这里的 "php-ext-cli" 本身没有这玩意&#xf…

php 数据类型转换与比较

<?php define("PI", 3.1415926); echo PI."<br>"; //定义一个常量 define("GREETING","Hello world!");echo constant("GREETING")."<br>"; $a 10; $b "10a"; echo (string)$a $b; …

(转载)说说char

char一直都在使用并且大量的使用&#xff0c;但是&#xff0c;大部分都是在单一平台上&#xff0c;那样没有太多的问题&#xff0c;在windows上大量直接使用wchar_t来解决中文的问题。并且在使用跨平台时也大多直接使用了Qt的QString来节省了很多的麻烦&#xff0c;但是现在项目…