Java学习笔记(六)--包装类、基本类型、拆箱、装箱

基本类型与包装类

        1.java中包括8个基本类型,与之对应的有8个包装类型,包装类是针对原生数据类型的包装

                       基本类型                           包装类型
byte Byte(Number的子类)
short Short(Number的子类)
int Integer(Number的子类)
long Long(Number的子类)
float Float(Number的子类)
double Double(Number的子类)
character Character(Object的子类)
boolean Boolean(Object的子类)

2.区别

  • 基本类型是直接用来存储值的,放在栈中方便快速使用,包装类型是类,其实例是对象,放在堆中
  • 基本类型不是对象,因此没有方法,包装类型是类,因此有方法
  • 基本类型直接赋值即可,包装类型需要使用new关键字创建
  • 包装类型初始值为null,基本类型初始值不为null,是根据类型而定的

3.为什要需要有包装类型

 包装类型将基本类型的值包装在对象中,这样就可以使用对象的方法操作基本类型,类型之间的转换需要使用包装类型的方法才能完成,因此需要有包装类型。

               包装类                  装箱                 拆箱
Byte

valueOf(String s)装箱成包装类

valueOf(String,int)根据指定进制装箱成包装类

byteValue()
Short valueOf() shortValue()
Integer valueOf() intValue()
Long valueOf() longValue()
Float valueOf() floatValue()
Double valueOf() doubleValue()
Character valueOf() charValue()
Boolean valueOf() booleanValue()

使用包装类的parseXXX方法还可以实现不同类型之间的转换,如将数字字符串转换为int类型:

        int i = Integer.parseInt("23");

拆箱与装箱

      装箱:将基本类型转换成包装类的过程

      拆箱:将包装类转换成基本类型的过程

      在jdk1.5之后提供了自动拆装箱

来个栗子

public class SimpleTest {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;

        System.out.println(i1==i2);  //①true
        System.out.println(i3==i4);  //②false
    }
}

  ①处结果为true,②处为false,原因是什么呢?(我的jdk是1.8版本的)

   Integer i1 = 100;执行的操作是100先通过valueOf()方法进行装箱操作,Integer.valueOf()的源码如下:

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
 Integer比较特殊,在-128到127之间,会走缓存,不在这个区间的数会走new Integer(i),也就是会创建新的对象,因此,100比较的时候是true,200比较的时候是false

猜你喜欢

转载自blog.csdn.net/zh15732621679/article/details/79623414