Java 包装类 自动装箱和拆箱

包装类(Wrapper Class)

  包装类是针对于原生数据类型的包装。

  因为有8个原生数据类型,所以对应有8个包装类。

  所有的包装类(8个)都位于java.lang下。

  Java中的8个包装类分别是:Byte, Short, Integer, Long, Float, Double, Character, Boolean,它们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。

  下面以主要Integer类为例说明。

Integer

  Integer类将int类型的值包装到一个对象中。

  Integer通过下面这个构造方法构造相应的整型数的对象:

  public Integer(int value);

  public int intValue()方法则返回这个包装类所包装的整型值。

自动装箱/拆箱(Autoboxing/unboxing)

  JDK5.0的一个新特性是自动装箱和自动拆箱。

  自动装箱/拆箱大大方便了基本类型数据和它们包装类的使用。

  自动装箱:基本类型自动转为包装类(int >> Integer)

  自动拆箱:包装类自动转为基本类型(Integer >> int)

  比如下面的例子:

import java.util.ArrayList;
import java.util.Collection;

public class BoxTest
{
    public static void main(String[] args)
    {
        Collection<Integer> c = new ArrayList<Integer>();

        c.add(3);//将int类型的3转换为Integer类型并放到集合当中
    }
}

缓存

  下面这个程序很奇怪:

  

public class BoxTest2
{
    public static void main(String[] args)
    {
        Integer i1 = 200;
        Integer i2 = 200;

        if (i1 == i2)
        {
            System.out.println("i1 == i2");

        }
        else
        {
            System.out.println("i1 != i2");

        }
    }

}

  当两个数都是100的时候==判断相等,当两个数都是200的时候判断不相等。

  查看内部实现代码可知,Integer类有一个缓存,它会缓存-128~127之间的整数

  当调用valueOf的时候,不会生成新的对象,而是从缓存中取出对象。这样可以提高性能。

  使用构造方法的时候肯定会生成新的对象。

时间: 2024-10-18 14:34:35

Java 包装类 自动装箱和拆箱的相关文章

Java的自动装箱和拆箱

1 public class BoxingDemo { 2 3 public static void main(String[] args) { 4 5 /** 6 * 自动装箱示例: 7 * 基本类型int是不能直接赋值给其包装类对象Integer的,但是这里这条语句可以编译通过 8 * 因为自动装箱原理隐式包含了下面2条语句: 9 * Integer temp = new Integer(1); 10 * int1 = temp; 11 * */ 12 Integer int1 = 1; 1

Java中自动装箱与拆箱详解

在讲装箱与拆箱之前我们要先了解一下这个问题的来源: Java中的类型分为基本类型(Primitive type)和类类型(Class type)两种: 基本类型包括byte型.char型.short型.int型.long型.float型.double型.boolean型八种.基本类型指的是直接包含值得类型,可提供语言级别的支持. 类类型包括Byte.Character.Short.Integer.Long.Float.Double.Boolean.为什么要用类类型呢?原因其实很简单,因为Java

了解Java的自动装箱与拆箱

一.简单来说,装箱就是自动将基本数据类型转换成包装器类型:拆箱就是自动将包装器类型转换为基本数据类型. //自动装箱 Integer total = 99; //自动拆箱 int totalprim = total; 需要装箱拆箱的类型有: Integer total = 99;  执行上面那句代码的时候,系统为我们执行了:  Integer total = Integer.valueOf(99); int totalprim = total;  执行上面那句代码的时候,系统为我们执行了:  i

Java的自动装箱和拆箱的简单讲解

 装箱就是把基础类型封装成一个类.比如把int封装成Integer,这时你就不能把他当成一个数了,而是一个类了,对他的操作就需要用它的方法了. 拆箱就是把类转换成基础类型.比如你算个加法什么的是不能用类的,就得把它转换成基本类型,jdk5以后已经可以自动转换了貌似.基本类型你应该懂的吧 (byte,short,int,long,float,double,boolean,char) byte :java.lang.Byte short :java.lang.Short int: java.lang

Java基础之包装类的自动装箱和拆箱详解

定义 在java中,数据类型可以分为两大类,即基本数据类型和引用数据类型,基本数据类型的数据不是对象,所以对于要将数据类型作为对象来使用的情况,java提供了相对应的包装类.(关于包装类的详细介绍请参看博客Java基础之常用类详解) 本篇博客主要讲述包装类的自动装箱和拆行机制. 所谓装箱,就是把基本数据类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int类型包装成Integer类型的对象,或者把double包装秤Double,等等. 所谓拆箱,就是和装箱的方向相反,将I

[转]JAVA自动装箱和拆箱

1.Java数据类型 装箱和拆箱之前,我们先来了解一下Java的基本数据类型. 在Java中,数据类型可以分为两大种,Primitive Type(基本类型)和Reference Type(引用类型).基本类型的数值不是对象,不能调用对象的toString().hashCode().getClass().equals()等方法.所以Java提供了针对每种基本类型的包装类型.如下: Java基本数据类型 INDEX 基本类型  大小 数值范围 默认值 包装类型 1 boolean    --- t

《Java中的自动装箱和拆箱功能.》

1 //Java中的自动装箱和拆箱功能. 2 class AutoboxingUnboxing 3 { 4 public static void main(String[] args) 5 { 6 //直接把一个基本类型变量赋给Interger对象. 7 Integer inObj = 5; 8 Object inObj1 = 6; 9 //直接把一个boolean类型的变量赋给一个Object类型的变量. 10 Object boolObj = true; 11 //直接把Integer对象赋

java自动装箱与拆箱

基本数据(Primitive)类型的自动装箱(autoboxing).拆箱(unboxing)是J2SE 5.0提供的新功能,跟泛型.变长参数等一样,这也是一颗"语法糖",之前介绍jvm早期优化的时候说过,语法糖对运行期的代码没有任何影响,其目的仅仅是方便程序员使用,所有语法糖编译后都将会还原成基础语法.这次介绍的自动装箱和拆箱也不例外.看下头的例子: public class Demo { public static void main(String[] args) { Intege

Java 自动装箱和拆箱

JDK1.5之后的功能 自动装箱:指的是开发人员可以把一个基本数据类型直接赋给对应的包装类 自动拆箱:指开发人员可以把一个包装类对象直接赋给对应的基本数据类型 public static void main(String[] args) { Integer i = 1; //装箱 int j = i ; //拆箱 } public static void main(String[] args) { List list = new ArrayList(); list.add(1); int j=