2020-8-24 八个包装类的属性 - 图1Java是面向对象的编程语言,但它包含了8种基本数据类型。这8种数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量、方法可以被调用。
    这8种数据类型带来了一定的方便性,例如可以进行简单、有效的常规数据处理。但在某些时候,基本数据类型会有一些制约,例如所有引用类型变量都继承了Object类,都可以当成Object类型变量使用。但基本数据类型的变量就不可以。
    为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题,Java提供了包装类的概念,为8种基本数据类型分别定义了相应的引用类型,并称之为基本数据的包装类
    包装类分别为:Byte,Short,Integer,Long,Character,Float,Double,Boolean
    除了int和char有点例外之外,其他基本数据类型对应的包装类都是将其首字母大写即可。
    在JDK1.5以前,把基本数据类型变量变成包装类需要通过对应包装类的构造器来实现。
    但是从JDK1.5之后这种繁琐就消除了,JDK1.5提供自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)功能
    所谓自动装箱,就是可以把一个基本类型变量直接赋给对应包装类变量,或者赋给Object变量(Object是所有类的父类,子类可以直接赋给父类变量);自动拆箱则相反,允许把包装类对象直接赋给一个对应的仅类型变变量
    除此之外,包装类还可实现基本类型变量和字符串之间的转换。
    把字符串类型的值转换为基本类型的值有两种方式。
    ①利用包装类提供的parseXxx(String s)静态方法(除了Character之外所有包装类都提供了该方法)。
    ②利用包装类提供的Xxx(String s)构造器。
    String类提供了多个重载valueOf()方法,用于将基本类型转换成字符串
    如果希望把基本类型变量转换成字符串,还有一种更简单的方法:将基本类型变量和一个字符串进行“+”连接运算,系统会自动把基本类型变量转换成字符串。
    注意:虽然包装类型的变量是引用数据类型,但包装类的实例可以与基本数值类型的值进行比较,这种比较时可以直接取出包装类实例所包装的数值来进行比较的。
    需要注意的是Integer,系统是把一个-128~127之间的整数自动装箱成Integer对象,并放入了一个名为cache的数组中缓存起来。所以如果是把一个-128~127之间的整数自动装箱成一个Integer对象时,这个对象实际直接指向对应的数组元素,因此-128~127之间的同一个整数自动装箱成Integer实例时,永远是引用cache数组的同一个数组元素,所以它们的地址都相等;但如果把一个不在-128~127范围内的整数自动装箱成Integer对象时,系统总是创建一个新的Integer对象,此时地址就不相同了。