1、基本类型优先于装箱基本类型java
Java的基本数据类型也叫作内置类型是java语言自己提供的数据类型,是引用其余类型的基础。Java的基本数据类型分为:整数类型、浮点类型、字符类型、布尔类型这四个类型。而每个基本类型又各自对应了一个引用类型,称为包装类型,装箱基本类型中对应于int 、double、和boolean的是Integer、Double、Boolean。函数
1.基本类型与装箱类型的主要区别:spa
(1)基本类型只有值,而装箱基本类型则具备它们的值不一样的同一性,即两个装箱基本类型能够具备相同的值和不一样的同一性。code
(2)基本类型只有函数值,而每一个装箱基本类型则都有一个非函数值,除了它对应基本类型的全部函数值以外,还有个null。对象
(3)基本类型一般比装箱类型更节省时间和空间。blog
2.对装箱基本类型运用==操做符几乎老是错误的。接口
3.当在一项操做中混合使用基本类型和装箱基本类型时,装箱基本类型就会自动拆箱。若是null对象引用被自动拆箱,就会抛出一个NullPointerException异常。io
4.使用装箱基本类型的情景:class
(1)做为集合中的元素、键和值不可使用基本类型,所以必须使用装箱基本类型。基础
(2)在参数化类型和方法中,必须使用装箱基本类型做为类型参数,由于Java不容许使用基本类型。例如,你不能讲变量声明为ThreadLocal<int>类型,所以必须使用ThreadLocal<Integer>代替。
(3)在进行反射的方法调用时,必须使用装箱基本类型。
2、经过接口引用对象
1. 若是有合适的接口类型存在,那么对于参数、返回值、变量和域来讲,就都应该使用接口类型声明。这样会使程序更加灵活
//合理,使用接口做为类型 Set<Son> SonSet = new LinkedHashSet<>(); //不合理,使用类做为类型 LinkedHashSet<Son> sonSet = new LinkedHashSet<>();
2. 若是没有合适的接口存在,彻底能够用类而不是接口来引用对象。
总结:能使用接口就使用接口,若没有合适的接口,就使用类层次结构中提供了必要功能的最小的具体类来引用对象。
《EffectiveJava》P229~P234,P234~P236