基础类型与包装类
程序员文章站
2022-03-26 15:49:11
基础类型与包装类区别默认值不同: int的初值为0,Ingeter的初值为null;数据类型不同: int是基本数据类型,Integer是引用数据类型(对象);存储空间不同: 基本类型存储在栈里,包装类型存储在堆里;实际使用差异int a = 500;int b = 500;// true 只要有基础类型的比较就是值的对比(自动拆箱)System.out.println(a == b);Integer a1=500;Integer b1=500;// false 两个包装类比...
基础类型与包装类区别
- 默认值不同: int的初值为0,Ingeter的初值为null;
- 数据类型不同: int是基本数据类型,Integer是引用数据类型(对象);
- 存储空间不同: 基本类型存储在栈里,包装类型存储在堆里;
实际使用差异
int a = 500;
int b = 500;
// true 只要有基础类型的比较就是值的对比(自动拆箱)
System.out.println(a == b);
Integer a1=500;
Integer b1=500;
// false 两个包装类比较要考虑常量池支持范围,超出范围是就是内存地址对比!(自动装箱)
System.out.println(b1 == a1);
// true 一般包装类都其值对比的重写方法或方式
System.out.println(b1.equals(a1));
装箱和拆箱
1 //自动装箱
2 Integer total = 99;
4 //自动拆箱
5 int totalprim = total;
- 反编译class文件 javap -c StringTest 之后得到如下内容:
- Integer total = 99; 编译成 Integer total = Integer.valueOf(99);
- valueOf()会首先判断值大小:如果i小于-128或者大于等于128,就创建一个Integer对象,否则执行SMALL_VALUES[i + 128]
- int totalprim = total; 编译成 int totalprim = total.intValue();
Java中包装类的常量池技术
Double aDouble = 1.0;相当于 Double aDouble = new Double(1.0);
Float aFloat= (float) 1.0;相当于 Float aFloat = new Float(1.0);
- java数据共有8种基础数据类型和一个String引用类型,String类和6种数据类型的包装类都实现常量池技术(除了Boolean外,其他都只对小于128的值才支持,常量池仅仅是【-128至127】这个范围内的常量,如果常量值超过这个范围,就会从堆中创建对象,不再从常量池中取)
- 两种浮点数类型的包装类Float,Double并没有实现常量池技术
-
String类型也实现了常量池技术,但是稍微有点不同。String型是先检测常量池中有没有对应字符串,如果有,则取出来;如果没有,则把当前的添加进去
本文地址:https://blog.csdn.net/qq_42483257/article/details/112276132