Java基本类型和包装类型、包装类型的缓存机制、自动装箱与拆箱、浮点数与大整型

79 阅读2分钟

基本类型和包装类型

  1. 成员变量包装类型不赋值就是 null ,⽽基本类型有默认值且不是 null 。
  2. 包装类型可⽤于泛型,⽽基本类型不可以。
  3. 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量 (未被 static 修饰 )存放在 Java 虚拟机的堆中。
  4. 包装类型属于对象类型,我们知道⼏乎所有对象实例都存在于堆中。 相⽐于对象类型, 基本数据类型占⽤的空间⾮常⼩

包装类型的缓存机制

Byte , Short , Integer , Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数 据, Character 创建了数值在 [0,127] 范围的缓存数据, Boolean 直接返回 True or False.
如果超出对应范围仍然就会去创建新的对象,缓存的范围区间的⼤⼩只是在性能和资源之间的权衡。 两种浮点数类型的包装类 Float , Double 并没有实现缓存机制,因为1,2两个数之间有无穷多的小数。
整型包装类对象之间值的⽐较,全部使⽤ equals ⽅法⽐较

自动装箱与拆箱

装箱:调用包装类的valueOf()⽅法,如Integer.valueOf(10)
拆箱:调⽤xxxValue()⽅法,如integer.intValue()

浮点数与大整型

计算机是⼆进制的,计算机在表示⼀个数字时,宽度是有限的,⽆限循环的⼩数存储在计算机时,只能被截断,导致⼩数精度发⽣损失的情况。所以浮点数无法⽤⼆进制精确表示。
BigDecimal可实现对浮点数的运算,且不会造成精度丢失。
需要浮点数精确运算结果的业务场景(⽐如涉及到钱的场景),使用BigDecimal
在 Java 中,超出64 位 long 后,可使用BigInteger,其内部使⽤int[]数组来存储任意⼤⼩的整形数据