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是一种可以存储不同类型的数据结构,在很多场合这是很有用得为了达到这种目的,可以想象,该对象应该存储对象的类型信息,数据信息以及其他辅助详细考虑用途,这种对象必须支持对不同对象的存储,对 ...
随机推荐
- OCR文字识别软件许可文件被误删了怎么办
使用任何一款软件,都会有误操作的情况发生,比如清理文件时一不小心删除了许可文件,对于ABBYY FineReader 12这样一款OCR文字识别软件,因失误错误删除了许可文件该怎么办呢?今天就来给大家 ...
- 关于ASP.NET MVC4 Web API简单总结
原文地址:http://www.cnblogs.com/lei2007/archive/2013/02/01/2888706.html wcf web api 和 asp.net web api , ...
- oracle数据字典-权限-角色
每个数据库都提供了各自的数据字典的方案,虽然形式不同,但是目的和作用是一样的,比如在mysql里数据字典是在information_schema 里表现的,sqlserver则是在sys这个系统sch ...
- OpenJudge计算概论-求特殊自然数【枚举法】【将整数转成字符串】
/*======================================================================== 求特殊自然数 总时间限制: 1000ms 内存限制 ...
- javascript中href和replace比较
在使用javascript的时候,有时候对于经常使用的方法太熟悉而忽略了他们之间原理的细微差别.举例如下:window.location.href,window.location.replace. ...
- java远程调试(断点)程序/tomcat( eclipse远程调试Tomcat方法)
tomcat远程调试: 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- 根据N种规格中的M种规格值生成的全部规格组合的一种算法
近来在开发SKU模块的时候,遇到这样一个需求,某种商品有N(用未知数N来表示是因为规格的数组由用户制定且随时可以编辑的,所以对程序来说,它是一个未知数)类规格,每一类规格又有M个规格值,各种规格值的组 ...
- 支付宝客户端支付配置RSA公钥的问题错误,导致收不到回发通知
没收到通知的原因是你们的商户公钥上传地址弄错了,应该上传到合作伙伴管理,您上传到无线wap哪里了,把您的公钥,从无线wap哪里复制贴到合作伙伴管理即可
- lwip初始化过程
首先应该看下源码包中的doc/rawapi.txt,这篇文档中介绍了初始化流程. 初始化过程的前半部分主要针对lwip的内存管理和各个协议层,在src/core/init.c中有一个lwip_init ...
- bzoj1346: [Baltic2006]Coin
Description 有一个国家,流通着N种面值的硬币,其中包括了1分硬币.另外,有一种面值为K分的纸币,它超过了所有硬币的面值. 有一位硬币收藏家,他想收集每一种面值的硬币样本.他家里已经有一些硬 ...