目录
java中八种基本数据类型对应八种包装类型,属于引用数据类型,父类是java.lang.Number,间接继承Object(除了Character、Boolean以外,Character、Boolean直接继承Object)
使用场景:
调用某个方法需要传入一个数字,但是数字是基本数据类型,但是方法的参数是Object引用类型,此时便需要包装类
简言之:八种基本类型不够用,又引入八种基本类型对应的八种包装类型,如下所示

装箱:基本数据类型转化为引用数据类型
拆箱:引用数据类型转化为基本数据类型
我们首先看一下Number类中的拆箱方法,这些方法子类都有

以Integer类为例,其他是一模一样
如下图所示,当我们使用Integer类时,有下面两个构造方法,分别可传入int类型参数、String类型参数

本类的toString方法也已经给我们重写好了,不比我们再写
- // 直接使用数字 从JDK9(Java9)之后便过期了
- Integer x = new Integer(100);
- System.out.println(x);
- // String类型数字
- Integer y = new Integer("555");
- System.out.println(y);

这两个都是静态属性,其他的类也是这么调用
- System.out.println(Integer.MAX_VALUE);
- System.out.println(Integer.MIN_VALUE);

好消息:JDK1.5(java5)之后,支持自动拆箱与自动装箱
自动装箱:基本类型类型自动转化为包装类 (底层还是new了一下,依然是引用)
自动拆箱:包装类自动转化为基本类型 (Number类的方法就用不着了,因为可以直接拆箱)
更好的方便了编程,解放程序员的双手
- // 自动装箱
- Integer x=100;
- // 自动拆箱
- int y =x;
说明:“==”不会触发自动拆箱机制,只有加减乘除时才可触发
但是!!!下面这个地方很重要
- Integer a=128;
- Integer b=128;
- System.out.println(a==b);
-
- Integer x=127;
- Integer y = 127;
- System.out.println(x==y);

这里就有一个问题,为什么“==”不可触发,但是第二个输出是true呢?
-128~127 这段数字在开发中使用的比较多,这个地方有一个整数型常量池,如果没有超过byte的取值范围,就会存储到整数型常量池中,所以在使用-128~127时就不会new对象了,但是128超出了byte取值,所以a,b在使用时会创建对象,在x,y中,保存的内存地址相同所以为true

- Integer x = new Integer(1000);
- int y = x.intValue();
int value = Integer.parseInt("123");
使用情景:

- String s = Integer.toBinaryString(3);
- System.out.println(s);

- String s = Integer.toHexString(20);
- System.out.println(s);
下面这段代码也能看懂了

- String s = Integer.toOctalString(8);
- System.out.println(s);

