int和Integer的区别
二者区别
- int是基本数据类型,Integer是int的包装类
- int变量可以做运算,但不能调用方法,Integer变量实例化后可以调用方法,但是不能做运算。若int变量想要调用方法就得转化为Integer,Integer变量想要做运算就得转化为int。这里可以利用自动装箱和自动拆箱转换。二者之间的详细转换见下文:链接: link
- int直接存储数据值,Integer是对象的引用,当 new 一个 Integer 时,实际上是生成一个指针指向此对象。
- int的默认值为0,Integer的默认值为null。
Integer缓存
Integer内部定义了IntergerCache结构,IntegerCache中定义了Integer[],保存了从[-128,127]范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在[-128,127]范围内时,可以直接使用数组中的元素,不用再去new了。目的:提高效率。一旦超出[-128,127]范围,就会new一个新Integer对象。
补充:
Byte、Short、Integer、Long缓存范围 [-128, 127] ;
Character缓存范围 [0, 127];
Boolean 包装类型直接返回 True 或者 False。
Float、Double 没有缓存机制
Integer缓存举例
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
Integer m = 1;//自动装箱
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;//超出[-128,127]范围,相当于new了一个Integer对象
Integer y = 128;//超出[-128,127]范围,相当于new了一个Integer对象
System.out.println(x == y);//false