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包装类的主要内容,如果未能解决你的问题,请参考以下文章