[Java开发之路](23)装箱与拆箱
1. 简单介绍
大家对基本数据类型都很熟悉。比如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性,比方基本类型不能调用方法、功能简单。
。。,为了让基本数据类型也具备对象的特性, Java 为每一个基本数据类型都提供了一个包装类,这样我们就能够像操作对象那样来操作基本数据类型。
对象包装类是不变的,即一旦构造了包装类,就不同意更改包装在当中的值。
同一时候,对象包装类还是final,因此不能定义它们的子类。
如果想定义一个整型数组列表,而尖括号里的类型參数不同意是基本类型的。也就是说。不同意写成ArrayList<int>。这里用到了对象包装类。我们能够声明一个Integer对象的数组列表。
ArrayList<Integer> list = new ArrayList<Integer>();
备注:
ArrayList<Integer>的效率远远低于int[] 数组,可是还是使用ArrayList。其原因就是程序猿操作的方便性比运行效率更加重要。
进行例如以下操作:
list.add(3);
将自己主动转换为:
list.add(Integer.valueOf(3));
这样的变换就是自己主动装箱。
相反的,当将一个Integer对象赋予一个int值时,将会自己主动拆箱:
int n = list.get(i)
将自己主动转换为:
int n = list.get(i).intValue();
备注:
装箱与拆箱是编译器认可的,而不是虚拟机。
编译器在生成类的字节码时,插入必要的方法调用。
虚拟机仅仅是运行这些字节码。
使用数值对象包装类有一个优点:
能够将某些基本方法放置在包装类中。
int x = Integer.parseInt(s);
2. 分类
装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自己主动装箱
package com.qunar.test;public class HelloWorld {public static void main(String[] args) {// 定义一个int基本类型值int num = 14;// 手动装箱Integer x = new Integer(num);// 自己主动装箱Integer y = num;System.out.println("x->"+x+" y->"+y);}}
拆箱:和装箱相反。把包装类对象转换成基本类型的值,又可分为手动拆箱和自己主动拆箱
package com.qunar.test;public class HelloWorld {public static void main(String[] args) {// 定义一个Integer包装类Integer integer = new Integer(8);// 手动拆箱int x = integer.intValue();// 自己主动拆箱int y = integer;System.out.println("x->"+x+" y->"+y);}}
3. 分析
自己主动装箱的弊端:
自己主动装箱有一个问题。那就是在一个循环中进行自己主动装箱操作的情况,如以下的样例就会创建多余的对象,影响程序的性能:
Integer sum = 0;for(int i=1000; i<5000; i++){sum+=i;}
上面的代码sum+=i能够看成sum = sum + i。可是+这个操作符不适用于Integer对象,首先sum进行自己主动拆箱操作。进行数值相加操作,最后发生自己主动装箱操作转换成Integer对象。其内部变化例如以下:
sum = sum.intValue() + i;Integer sum = new Integer(result);
因此在我们编程时,须要注意到这一点。正确地声明变量类型。避免由于自己主动装箱引起的性能问题。
[Java开发之路](23)装箱与拆箱的更多相关文章
- Java自学-数字与字符串 装箱和拆箱
		
Java中基本类型的装箱和拆箱 步骤 1 : 封装类 所有的基本类型,都有对应的类类型 比如int对应的类是Integer 这种类就叫做封装类 package digit; public class ...
 - java和c#中的装箱和拆箱操作
		
c#装箱和拆箱 装箱:整体上来说,装箱是将值类型转换成引用类型,比如将Vector3转换成Object类型. 具体而言: 1)在托管堆中为值类型分配内存.除了原始的数值以外还应该有指向该数值的引用. ...
 - Java包装类,基本的装箱与拆箱
		
我的博客 何为包装类 将原始类型和包装类分开以保持简单.当需要一个适合像面向对象编程的类型时就需要包装类.当希望数据类型变得简单时就使用原始类型. 原始类型不能为null,但包装类可以为null.包装 ...
 - Java学习笔记之——自动装箱与拆箱
		
自动装箱与拆箱 基本类型与引用类型的互相转换 1. 基本类型对应的包装类 byte short char int long flaot double ...
 - JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱
		
1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...
 - c#重点[数据类型,构造方法,变量,变量,运算符,装箱,拆箱]
		
1.命名规范 类 :名词 每个单词的首字母大写 Dog Student PersonClass 字段:首个字母小写,如果有多个单词,后面的单词首字母大写 string name=" ...
 - Java 自动装箱与拆箱
		
Java 自动装箱与拆箱(Autoboxing and unboxing) 什么是自动装箱拆箱 基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供 ...
 - 全面理解java自动装箱和拆箱(转)
		
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象.自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接. 如 ...
 - Java装箱和拆箱的基本概念及使用
		
Java装箱和拆箱的基本概念及使用 要理解装箱和拆箱的概念,就要理解Java数据类型 装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质.int包装成Integer.float包装成Fl ...
 
随机推荐
- Nature Reserve
			
Nature Reserve time limit per test:2 seconds memory limit per test:256 megabytes input:standard inpu ...
 - 阿里云将centos 7 自带的 php 5.4升级为 5.6
			
1.php -v PHP 5.4.16 (cli) (built: Nov 6 2016 00:29:02) Copyright (c) 1997-2013 The PHP Group Zend En ...
 - [LeetCode] Longest Common Prefix 字符串公有前序
			
Write a function to find the longest common prefix string amongst an array of strings. Hide Tags Str ...
 - scrapy实战
			
采用scrapy实现对股票网站的爬取 功能描述: 技术路线:scrapy 目标:获取上交所和深交所所有股票名称和交易信息并存储 实例编写: 步骤1:建立工程和spider爬虫模板 步骤2:编写spid ...
 - 语法错误: 标识符“__RPC__out_xcount_part” 解决方法
			
1.错误描述 2.解决方案:将 $(DXSDK_DIR)\Include; 放到最后面,如下
 - 嵌入式  Linux线程锁详解pthread_mutexattr_t【转】
			
转自:http://blog.sina.com.cn/s/blog_8795b0970101il6g.html 在Posix Thread中定义有一套专门用于线程同步的mutex函数. . 创建和销毁 ...
 - linux下的程序调试方法汇总
			
搞电子都知道,电路不是焊接出来的,是调试出来的.程序员也一定认同,程序不是写出来的,是调试出来的.那么调试工具就显得尤为重要,linux作为笔者重要的开发平台,在linux中讨论调试工具主要是为那些入 ...
 - Android Timer 的 schedule()方法定时循环切换图片
			
void java.util.Timer.schedule(TimerTask task, long delay, long period)第一个参数,是 TimerTask 类,在包:import ...
 - my.ini配置详解
			
Mysql my.ini 配置文件详解 #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大 #TYPE: SYSTEM ...
 - Android学习--持久化(二) SharedPreferences
			
SharedPreferences SharedPreferences 也是通过一个简单的Demo来理解SharedPreferences我们该怎么用,说说自己站在一个iOS开发的角度来看这个Shar ...