【面试题1】int和Integer有什么区别?
思考1:为什么要有基本类型和包装类型
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型。但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型。而Integer就是int的包装类型。
下图是JAVA中所以基本类型以及对应包装类型和各自所占用的大小。
思考2:包装类型和基本类型的区别
1.声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
2.存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
3.初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null
4.使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到
思考3:包装类型和基本类型的相互转换?
从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。
自动装箱场景:
List声明的泛型只能为包装类型,将基本类型加入list中发生了自动装箱。
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
自动拆箱场景:
用基本类型接收list中的值。
int number = intList.get(0);
延伸题1: