1、基本数据类型与包装类的区别
-
1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;基本类型不是。
-
2、声明的方式不同:
基本数据类型不需要new关键字;
包装类型需要new在堆内存中进行new来分配内存空间 -
3、存储位置不同:
基本数据类型直接将值保存在值栈中
包装类型是把对象放在堆中,然后通过对象的引用来调用他们 -
4、初始值不同:
int的初始值是0、boolean的初始值是false
包装类的初始值是null -
5、包装类型是引用的传递;基本类型是值的传递
2、为什么Integer超出-128、127时==为false
我们先定义一个Interger的值,进源码看看怎么回事。
public static void main(String[] args) {
Integer integer60 = 60;
}
1、断点刚进来,就在判断是否只是最大值和最小值之间
2、进IntegerCache类
可以看到上一个的最小值 -128 和最大值(默认是127)
下面的操作大概就是把这范围内的数值都new出来了,都已经存在常量池中,所以在这范围内的数据,会直接拿常量池里的,所以会==会是true。
而超出范围的都直接new一个对象出来,地址不同,使用“==”比较也就不相等了
3、装箱和拆箱
装修:就是自动将基本数据类型转换为包装器类型
拆箱:就是自动将包装器类型转换为基本数据类型
public static void main(String[] args) {
Integer i = 60; //装修 60是基本数据类型 赋值给包装类Integer
int j = i; // 拆箱 包装类Integer 赋值给 int基本数据类型
i+=1;
}
1、装箱时调用了Integer的valueof方法,将值赋给Integer。
2、拆箱时调用Integer的intValue方法,直接将该类的基本数据类型返回
3、Integer i+=1时
会先调用intValue将Integer转为int,相加后再调用valueOf方法转为Integer