基础类型与包装类

基础类型与包装类区别

  1. 默认值不同: int的初值为0,Ingeter的初值为null;
  2. 数据类型不同: int是基本数据类型,Integer是引用数据类型(对象);
  3. 存储空间不同: 基本类型存储在栈里,包装类型存储在堆里;

实际使用差异

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);
  1. java数据共有8种基础数据类型和一个String引用类型,String类和6种数据类型的包装类都实现常量池技术(除了Boolean外,其他都只对小于128的值才支持,常量池仅仅是【-128至127】这个范围内的常量,如果常量值超过这个范围,就会从堆中创建对象,不再从常量池中取)
  2. 两种浮点数类型的包装类Float,Double并没有实现常量池技术
  3. String类型也实现了常量池技术,但是稍微有点不同。String型是先检测常量池中有没有对应字符串,如果有,则取出来;如果没有,则把当前的添加进去

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值