欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

基础类型与包装类

程序员文章站 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 两个包装类比...

基础类型与包装类区别

  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型是先检测常量池中有没有对应字符串,如果有,则取出来;如果没有,则把当前的添加进去

本文地址:https://blog.csdn.net/qq_42483257/article/details/112276132

相关标签: java