Java基础知识总结:基础数据类型和包装类

版权声明:本文遵守创作共享 CC BY-NC-SA 3.0协议 https://blog.csdn.net/chen_kkw/article/details/86665932

intJava 的八个基础数据类型(boolean、byte 、short、char、int、foat、double、long)之一,Integer 则是其包装类型。需要注意的是,基础数据类型并不是对象,它们的包装类才是。

包装类的缓存

Integer 源码中存在IntegerCache 这个结构,其实就是缓存,缓存的范围为-128 ~ 127 之间,下面的代码中后者就使用到了缓存机制。

Integer i = new Integer(1);
Integer i = new Integer.valueOf(1);

这种缓存机制并不是只有 Integer 才有,同样存在于其他的一些包装类,

  • Boolean,缓存了两个常量实例 Boolean.TRUE/FALSE
  • Short,同样是缓存了-128127 之间的数值
  • Byte,数值有限,所以全部都被缓存

自动装箱和自动拆箱

你可能有疑惑,如果团队代码里有人使用了包装类,有人又使用了基础数据类型 int,那么他俩的代码岂不是不能兼容,要做繁琐的转换操作(Integer.valueOf()或者Integer.intValue())?

可喜的是在 Java 5 中有了自动装箱和自动拆箱功能(实际上就是 primitive valueobject 之间的隐式转换机制),Java 可以根据上下文,自动进行类型转换,这种转换发生在编译阶段,它们二者生成的字节码是一致的。

编码建议

那么编码时何时用基础数据类型,何时用包装类呢?答案是如果你专注于计算,可以用基础数据类型,如果是做业务建议使用包装类,阿里的 Java 编程规范中也提到对于实体类型(例如 RPCORM entity等),建议全部使用包装类。

没有更多推荐了,返回首页