Java包装类

Posted chiweiming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java包装类相关的知识,希望对你有一定的参考价值。

包装类的基本概念:

  Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[]数组或集合中的操作等等。

  为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。

  包装类均位于java.lang包,八种包装类和基本数据类型的对应关系如表8-1所示:

技术图片

  在这八个类名中,除了Integer和Character类以外,其它六个类的类名和基本数据类型一致,只是类名的第一个字母大写而已。

      在这八个类中,除了Character和Boolean以外,其他的都是“数字型”,“数字型”都是java.lang.Number的子类。Number类是抽象类,因此它的抽象方法,所有子类都需要提供实现。Number类提供了抽象方法:intValue()、longValue()、floatValue()、doubleValue(),意味着所有的“数字型”包装类都可以互相转型。如图8-1和图8-2所示。

技术图片

图8-1 Number类的子类

技术图片

图8-2 Number类的抽象方法

包装类的用途:

  1. 作为和基本数据类型对应的类型存在,方便涉及到对象的操作,如Object[]、集合等的操作。

      2. 包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法(这些操作方法的作用是在基本数据类型、包装类对象、字符串之间提供相互之间的转化!)。

/**
 * 测试包装类Integer
 */
public class Test 
    public static void main(String[] args) 
        //基本数据类型转换为包装类
       Integer a1 = Integer.valueOf(20);
       //包装类转换为基本数据类型
        int a2 = a1.intValue();
        //包装类可以和其他继承Number类的子类对象互相转换
        Double d1 = a1.doubleValue();
        Float f1 = a1.floatValue();
        //字符串转换为包装类
        Integer a3 = Integer.valueOf("30");
        //包装类对象转换为字符串
        String s1 = a3.toString();
    

自动装箱和拆箱:

  基本数据类型和包装类对象转换时虚拟机会自动进行拆箱和装箱。

//自动装箱
Integer in1 = 123;  //等价于Integer in1 = Integer.valueOf(123);
//自动拆箱
int in2 = in1;  //等价于 int in2 = in1.intValue();

包装类的缓存问题:

//自动装箱
Integer in1 = 123;  //等价于Integer in1 = Integer.valueOf(123);
Integer in2 = 123;
System.out.println(in1 == in2); //在Integer的源码里面,已经缓存了区间[-128,127]里面的Integer[]对象,在这个区间里面的对象直接返回缓存对象引用,不在区间范围就new一个新的Integer对象

Integer in3 = 1234;
Integer in4 = Integer.valueOf(1234);
System.out.println(in3 == in4);

 

以上是关于Java包装类的主要内容,如果未能解决你的问题,请参考以下文章

JAVA包装类介绍(包装类基本类型数据)

Java包装类(二十八)

Java开发知识之Java的包装类

Java包装类

java包装类

好程序员Java教程分享Java之包装类与常用类