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是一种可以存储不同类型的数据结构,在很多场合这是很有用得为了达到这种目的,可以想象,该对象应该存储对象的类型信息,数据信息以及其他辅助详细考虑用途,这种对象必须支持对不同对象的存储,对 ...
随机推荐
- linux服务之httpd
http://mirrors.cnnic.cn/apache/httpd/docs/ 英文pdf文档下载 Apache HTTP Project’s goal It is the Apache HTT ...
- 虚拟化之vmware-vsphere概念,原理,功能
080-login-back.vmx .encoding = "UTF-8"config.version = "8"virtualHW.version = &q ...
- 关于getClass().getClassLoader()
关于getClass().getClassLoader() InputStream is = getClass().getClassLoader().getResourceAsStre ...
- class的使用
class test(object): """ get被称之为test对象的方法 """ def __init__(self,var1): ...
- 如何在Dynamics CRM 2011 的窗体表单上加载报表
1.代码 function onloadReport() { if (crmForm.FormType != 1 && crmForm.FormType != 5) { $(" ...
- json字符串转map
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</ar ...
- oracle 变量赋值
在oracle 中使用 select 字段 into 变量 from 表 where 条件 这种方法给变量赋值时和MSSQL的行为有比较大区别. 在MSSQL中如果在该表中未检索到任何行,则变量的值保 ...
- 如何利用RMAN Debug和10046 Trace来诊断RMAN问题?
学习转摘:https://blogs.oracle.com/Database4CN/entry/%E5%A6%82%E4%BD%95%E5%88%A9%E7%94%A8rman_debug%E5%92 ...
- [原]网络库libevent在Visual Studio中的使用方法
libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名分布式缓存软件memcached也 ...
- js之引用类型
一.摘要: <javascript高级程序设计第三版>一书中单独有一章对js的引用类型(Object.Array.RegExp.Function:基本包装类型:Boolean.Number ...