一)  装箱与拆箱

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. php 数组排序 sort asort ksort

    <?php $arr = array('d'=>'sdf', 'r'=>'sdf', 'a'=> 'eee'); //sort($arr); // 对数组的值进行重排, 删除之 ...

  2. MySQL中char(36)被认为是GUID导致的BUG及解决方案

    MySQL中char(36)被认为是GUID导致的BUG及解决方案 有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatException GUID 应包含带 4 个短划 ...

  3. UML学习(类图和序列图等)

    visio绘制UML图使用visio 提示此UML形状所在的绘图页不是UML模型图的一部分 请问这个问题怎么解决?新建->选择绘图类型->选择软件与数据库模板->选择UML模型图-& ...

  4. 触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证--Oracle序列

    程序开发时报错:触发器 'SA.U_USER_INFO_TRG' 无效且未通过重新验证打开触发器的定义,执行其中的语句,发现序列 U_USER_INFO_SEQ 未定义.什么是序列呢?序列相当于sql ...

  5. mysql-master-ha

    https://code.google.com/p/mysql-master-ha/wiki/TableOfContents?tm=6 http://www.cnblogs.com/gomysql/c ...

  6. phpredis中文手册——《redis中文手册》 php版--引用他人

    出处: http://www.cnblogs.com/zcy_soft/archive/2012/09/21/2697006.html 目录(使用CTRL+F快速查找命令): Key String H ...

  7. Linux 环境下开机自启动Oracle服务

    使用如下命令查看Oracle相关服务是否已启动: ps aux | grep ora_ #若无ora_**_**相关的进程,则oracle数据库实例未启动 netstat -tlnup | grep ...

  8. LintCode "Digit Counts" !!

    Lesson learnt: one effective solution for bit\digit counting problems: counting by digit\bit http:// ...

  9. bzojj1764: [Baltic2009]monument

    Description 给一个p*q*r的立方体,它由p*q*r个1*1*1的小立方体构成.每个立方体要么被虫蛀,要么不被.现在郑爽要选出一个a*a*b的立方体(方向任意),使得它没有被虫蛀过,并且4 ...

  10. 深度优化LNMP

    优化前准备工作 Centos准备及配置 准备安装包及软件:http://pan.baidu.com/s/1chHQF  下载解压到U盘即可安装http://pan.baidu.com/s/15TUWf ...