EffectiveJava-4

一、基本类型优先于装箱基本类型

  Java的基本数据类型也叫做内置类型是java语言本身提供的数据类型,是引用其他类型的基础。Java的基本数据类型分为:整数类型、浮点类型、字符类型、布尔类型这四个类型。而每一个基本类型又各自对应了一个引用类型,称为包装类型,装箱基本类型中对应于int 、double、和boolean的是Integer、Double、Boolean。

  1.基本类型与装箱类型的主要区别:

    (1)基本类型只有值,而装箱基本类型则具有它们的值不同的同一性,即两个装箱基本类型可以具有相同的值和不同的同一性。

    (2)基本类型只有函数值,而每个装箱基本类型则都有一个非函数值,除了它对应基本类型的所有函数值之外,还有个null。

    (3)基本类型通常比装箱类型更节省时间和空间。

  2.对装箱基本类型运用==操作符几乎总是错误的。

  3.当在一项操作中混合使用基本类型和装箱基本类型时,装箱基本类型就会自动拆箱。如果null对象引用被自动拆箱,就会抛出一个NullPointerException异常。

  4.使用装箱基本类型的情景:

    (1)作为集合中的元素、键和值不可以使用基本类型,因此必须使用装箱基本类型。

    (2)在参数化类型和方法中,必须使用装箱基本类型作为类型参数,因为Java不允许使用基本类型。例如,你不能讲变量声明为ThreadLocal<int>类型,因此必须使用ThreadLocal<Integer>代替。

    (3)在进行反射的方法调用时,必须使用装箱基本类型。

 二、通过接口引用对象

  1. 如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,就都应该使用接口类型声明。这样会使程序更加灵活

//合理,使用接口作为类型
Set<Son> SonSet = new LinkedHashSet<>();

//不合理,使用类作为类型
LinkedHashSet<Son> sonSet = new LinkedHashSet<>();

  2. 如果没有合适的接口存在,完全可以用类而不是接口来引用对象。

  总结:能使用接口就使用接口,若没有合适的接口,就使用类层次结构中提供了必要功能的最小的具体类来引用对象。

《EffectiveJava》P229~P234,P234~P236

原文地址:https://www.cnblogs.com/MrZhaoyx/p/11708688.html