Java中的装箱拆箱
一) 装箱与拆箱
Java中有概念是一切皆对象,因为所有的类都默认继承自Object。但是,对于数据类型是个例外,如short,int,long,float,double, byte,char,boolean。为了同一“一切接对象“这个概念,Java提供了装箱和拆箱功能。
也就是说Java为上面这八种数据类型提供了对应的Java类(包装类)实现。如下:
int |
Integer |
short |
Short |
long |
Long |
float |
Float |
double |
Double |
byte |
Byte |
char |
Character |
boolean |
Boolean |
- 将基本数据类型包装为Java类的过程成为装箱
- 将Java类转换为基本数据类型的过程成为拆箱
下面以int数据为例,演示装箱和拆箱:
package org.lyk.main; import org.lyk.entities.*; public class Main
{
public static void main(String[] args)
{
Integer num1 = new Integer(33);//装箱
int num2 = num1.intValue();//拆箱
System.out.println(num1 * 2);
System.out.println(num2 * 2);
}
}
对于float,double等其它数据类型,Java也提供了如floatValue(),doubleValue()等函数用于拆箱操作。
一) 自动装箱与拆箱
上面的代码要我们显示的调用Integer构造函数装箱,然后调用intValue()函数拆箱。这样显得比较臃肿也不利于使用,为此Java提供了自动装箱与拆箱。请看下面的代码演示:
package org.lyk.main; import org.lyk.entities.*; public class Main
{
public static void main(String[] args)
{
Integer num1 = 33;
int num2 = num1;
System.out.println(num1 * 2);
System.out.println(num2 * 2);
}
}
自动装箱/拆箱不用我们手动去写构造和调用拆箱函数,一切都自动完成。这样它的使用和普通数据类型没有任何区别了。
一) 数据类型划分
前面提到的八种数据类型,其实可以再分为两大类:
- 数值型(Number的直接子类):Short,Integer,Long,Double,Float,Double
- 对象型(Object的直接子类):Character,Boolean
二) Object接收基本数据类型
有了装箱拆箱,我们可以用Object接收基本数据类型。
package org.lyk.main; import org.lyk.entities.*; public class Main
{
public static void main(String[] args)
{
Object num1 = 33;//先将33自动装箱为Integer,在默认向上转型为Object
int num2 = (Integer)num1;//先将Object强制向下转型为Integer,然后再自动拆箱为num2
System.out.println(num1);
System.out.println(num2);
}
}
上面代码中的注释已经解释了Object接收基本数据类型的过程。所以,在Java中,任何对象都可以用Object来接收,可以说“Object一统天下“了!
三) 基本数据类型与String的转换
使用上面提到的包装类,最大的好处是可以和String类型相互转换
- 基本数据类型转换为String,用包装类的partXXX()方法
- String类型转换为基本数据类型,用String.valueOf()方法
以int数据为例:
package org.lyk.main; import org.lyk.entities.*; public class Main
{
public static void main(String[] args)
{
{
//基本数据类型转换为String
int num1 = 33;
Integer num2 = 44;
System.out.println(String.valueOf(num1));
System.out.println(String.valueOf(num2));
} {
//String转换为基本数据类型
String str = "123";
int num1 = Integer.parseInt(str);
Integer num2 = Integer.parseInt(str);
System.out.println(String.valueOf(num1));
System.out.println(String.valueOf(num2));
}
}
}
Java中的装箱拆箱的更多相关文章
- 如何理解Java中的自动拆箱和自动装箱?
小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...
- Java 的自动装箱拆箱
Java 是面向对象的语言,其基本数据类型也就有了相对应的类,称为包装类.以下是基本数据类型对应的包装类: 基本数据类型 包装类 byte(1字节) Byte short(2字节) Short int ...
- Java的自动装箱/拆箱
概述 自JDK1.5开始, 引入了自动装箱/拆箱这一语法糖, 它使程序员的代码变得更加简洁, 不再需要进行显式转换.基本类型与包装类型在某些操作符的作用下, 包装类型调用valueOf()方法将原始类 ...
- 通过源码了解Java的自动装箱拆箱
什么叫装箱 & 拆箱? 将int基本类型转换为Integer包装类型的过程叫做装箱,反之叫拆箱. 首先看一段代码 public static void main(String[] args) ...
- JAVA的自动装箱拆箱
转自:http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html 蛋呢 的空间 ??什么是自动装箱拆箱 基本数据类型的自动装箱(a ...
- CLR via C# 中关于装箱拆箱的摘录
装箱: 为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制.下面总结了对值类型的一个实例进行装箱操作时在内部发生的事情. 1.在托管堆中分配好内存.分配的内存量是值类型的各 ...
- Java中的自动拆箱装箱(Autoboxing&Unboxing)
一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...
- C#中的装箱拆箱
在C#中,经常需要把值类型和引用类型相互转换. 首先明确两条法则: 1.引用类型总是被分配到“堆”上. 2.值类型总是分配到它声明的地方: a.作为引用类型的成员变量分配到“堆”上 b.作为方法的局部 ...
- QVariant实质 (类似 C#中的装箱拆箱)
QVariant是一种可以存储不同类型的数据结构,在很多场合这是很有用得为了达到这种目的,可以想象,该对象应该存储对象的类型信息,数据信息以及其他辅助详细考虑用途,这种对象必须支持对不同对象的存储,对 ...
随机推荐
- Jquery使用ajax以及angularjs 动态模板加载并进行渲染
1. 源码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- IE7中line-height垂直居中问题
line-height:24px; *+line-height:24px; //针对ie7 height:24px
- [activiti] Activiti 5.18 的Mybatis版本依赖问题
测试activiti 是查询Task时抛出一个异常: org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat ...
- sql2008 将行转为字符串, 将字符串转为行 互转
--将行转为字符串 select stuff((select top 20 ','+ QQ from dl_QQ where uiid=1 order by tim desc for xml path ...
- 关于今天mysql数据库的一系列问题
首先,字符集的问题: mysql> show variables like 'character%';+--------------------------+------------------ ...
- Linux Modules Introduction
Modules are small kernel extensions ,that may be loaded and unloaded at will● Can implement drivers, ...
- DHCP协议讲解
一.DHCP服务介绍: DHCP为动态主机配置协议,该协议能自动配置主机的IP地址.子网掩码.网关及DNS服务器等TCP/IP信息.DHCP可以降低客户机IP地址配置的复杂度和网络管理成本. DHCP ...
- C#中的 int?是什么意思
http://www.cnblogs.com/firstcsharp/archive/2011/12/11/2283797.html int?:表示可空类型,就是一种特殊的值类型,它的值可以为null ...
- 【转】Oracle 表空间与数据文件
--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...
- 黄聪:解决丢失api-ms-win-crt-runtime-|1-1-0.dll的问题:vc_redist.x64
解决无法启动程序,因计算机中丢失api-ms-win-crt-runtime-|1-1-0.dll的问题 安装:Microsoft Visual C++ 2015 RC Redistributable ...