一)  装箱与拆箱

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中的装箱拆箱的更多相关文章

  1. 如何理解Java中的自动拆箱和自动装箱?

    小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...

  2. Java 的自动装箱拆箱

    Java 是面向对象的语言,其基本数据类型也就有了相对应的类,称为包装类.以下是基本数据类型对应的包装类: 基本数据类型 包装类 byte(1字节) Byte short(2字节) Short int ...

  3. Java的自动装箱/拆箱

    概述 自JDK1.5开始, 引入了自动装箱/拆箱这一语法糖, 它使程序员的代码变得更加简洁, 不再需要进行显式转换.基本类型与包装类型在某些操作符的作用下, 包装类型调用valueOf()方法将原始类 ...

  4. 通过源码了解Java的自动装箱拆箱

    什么叫装箱 & 拆箱? 将int基本类型转换为Integer包装类型的过程叫做装箱,反之叫拆箱. 首先看一段代码 public static void main(String[] args) ...

  5. JAVA的自动装箱拆箱

    转自:http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html 蛋呢  的空间 ??什么是自动装箱拆箱 基本数据类型的自动装箱(a ...

  6. CLR via C# 中关于装箱拆箱的摘录

     装箱: 为了将一个值类型转换成一个引用类型,要使用一个名为装箱(boxing)的机制.下面总结了对值类型的一个实例进行装箱操作时在内部发生的事情. 1.在托管堆中分配好内存.分配的内存量是值类型的各 ...

  7. Java中的自动拆箱装箱(Autoboxing&Unboxing)

    一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...

  8. C#中的装箱拆箱

    在C#中,经常需要把值类型和引用类型相互转换. 首先明确两条法则: 1.引用类型总是被分配到“堆”上. 2.值类型总是分配到它声明的地方: a.作为引用类型的成员变量分配到“堆”上 b.作为方法的局部 ...

  9. QVariant实质 (类似 C#中的装箱拆箱)

    QVariant是一种可以存储不同类型的数据结构,在很多场合这是很有用得为了达到这种目的,可以想象,该对象应该存储对象的类型信息,数据信息以及其他辅助详细考虑用途,这种对象必须支持对不同对象的存储,对 ...

随机推荐

  1. Jquery使用ajax以及angularjs 动态模板加载并进行渲染

    1. 源码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  2. IE7中line-height垂直居中问题

    line-height:24px; *+line-height:24px; //针对ie7 height:24px

  3. [activiti] Activiti 5.18 的Mybatis版本依赖问题

    测试activiti 是查询Task时抛出一个异常: org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat ...

  4. sql2008 将行转为字符串, 将字符串转为行 互转

    --将行转为字符串 select stuff((select top 20 ','+ QQ from dl_QQ where uiid=1 order by tim desc for xml path ...

  5. 关于今天mysql数据库的一系列问题

    首先,字符集的问题: mysql> show variables like 'character%';+--------------------------+------------------ ...

  6. Linux Modules Introduction

    Modules are small kernel extensions ,that may be loaded and unloaded at will● Can implement drivers, ...

  7. DHCP协议讲解

    一.DHCP服务介绍: DHCP为动态主机配置协议,该协议能自动配置主机的IP地址.子网掩码.网关及DNS服务器等TCP/IP信息.DHCP可以降低客户机IP地址配置的复杂度和网络管理成本. DHCP ...

  8. C#中的 int?是什么意思

    http://www.cnblogs.com/firstcsharp/archive/2011/12/11/2283797.html int?:表示可空类型,就是一种特殊的值类型,它的值可以为null ...

  9. 【转】Oracle 表空间与数据文件

    --============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...

  10. 黄聪:解决丢失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 ...