zoukankan      html  css  js  c++  java
  • Java进阶之effective java 笔记(一)

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

    java的类型系统,可分为基本类型和引用类型。

    基本类型:java有8种基本类型,可分为三类:字符类型char , 布尔类型boolean ,以及数值类型byte、short、int、long、float、double;

    引用类型: java有5种引用类型(对象类型):类 接口 数组 枚举 标注;如string list等;

    每个基本类型都有其对应的引用类型,称为装箱基本类型。

    要明白java中一切皆对象,而基本类型只有值,所以java为了管理基本类型,为每个基本类型都创建了一个包装类。

    什么是自动装箱、自动拆箱?

    提取装箱类型对用的基本类型的值的行为称为自动拆箱:当一项操作中混合着基本赖姓和装箱基本类型时,装箱基本类型就会自动拆箱。

     

    基本类型和装箱基本类型的区别:

    1、基本类型只有值,而包装类型则具有与它们的值不同的同一性(identity)。这个同一性是指,两个引用是否指向同一个对象,如果指向同一个对象,则说明具有同一性。(与此类似的还有等同性。)

    2、基本类型只有功能完备的值,而包装类型除了其对应的基本类型所有的功能之外,还有一个非功能值:null。

    3、基本类型通常比包装类型更节省时间与空间。

     

    在如下三个地方,包装类型的使用会更合理
          1、作为集合中的元素、键和值。
          2、在参数化类型中。比如:你不能这样写——ArryList<int>,你只能写ArrayList<Integer>.
          3、在进行反射方法的调用时。

     

    当必须使用装箱基本类型的时候需要注意一下几点:

       * 1:比较对象的值是否相等,不能使用==一定要使用equals
       * 2:当程序进行涉及装箱和拆箱基本类型的混合类型计算是,它会进行拆箱,当程序进行拆箱时,可能会抛出空指针异常。
       * 3:当程序装箱了基本类型值时,会导致高开销和不必要的对象创建。

     

    总结:当可以选择时,应尽量选择使用基本类型,基本类型更加简单、更加快速。

     

     

     

    二、通过接口引用对象

    应该优先使用接口而不是类来引用对象:如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,就应该使用接口进行声明。

    只有当利用构造器创建某个对象时,才需要真正引用这个类的对象。

    eg:

    List<String> list = new ArrayList<>();

    因为这样会使得程序更加灵活。

    三、类和接口

    1. 不可变类:不可变类是指其实例不能被改变的类。

    不可变类实际上是线程安全的,它们不要求同步。所以,不可变对象可以被自由的共享。客户端应该重用现有的实例:对于频繁使用的指,应该将不可变类设置为syatic final类型的。

    不可变类提供一些静态工厂,它们把频繁请求的实例缓存起来,当现有实例符合请求时,就不必创建新的实例。

     四、优先考虑泛型

     

  • 相关阅读:
    ajax01
    django04
    数据库
    WeakHashMap类
    IdentityHashMap
    Hashtable类
    LinkedHashMap类
    HashMap和TreeMap类
    PriorityQueue
    Synchronized
  • 原文地址:https://www.cnblogs.com/shawshawwan/p/9006760.html
Copyright © 2011-2022 走看看