• 讀書筆記


    1.盡量用基本類型,原因是null == int的情況,性能問題,比較問題3個問題

    Comparator<Integer> order = (i, j) -> (i < j) ? -1 : ((i == j) ? 0 : 1);
    int compare = order.compare(new Integer(2), new Integer(2) );
    System.out.println(compare);

    這裏輸出的預期應該是0,但實際是1。分析過程,i < j 這邊就自動拆箱成nt,然後i == j,==這裏是對象引用判斷,所以為假,則得出0了。

    改成下面這種就可以了。

            Comparator<Integer> order = (i, j) -> {
                int a = i, b = j;
                return i < j ? -1 : (i == j ? 0 : 1);
            };

    還有要注意下面這種錯誤的代碼,它會出null指針異常,編譯不過。因爲Integer會功能值有null,所以存在null == int這種情況,所以應該改爲int定義i。

     static Integer i;
        public static void main(String[] args) {
            if (i == 2) {
                System.out.println("ok");
            }
        }

     那么,什么时候应该使用包装类型呢?它们有几个合法的用途。第一个是作为集合中的元素、键和值。不能将基 本类型放在集合中,因此必须使用包装类型。这是一般情况下的特例。在参数化类型和方法中,必须使 用包装类型作为类型参数,因为 Java 不允许使用基本类型。例如,不能将变量声明为 ThreadLocal<int> 类型, 因此必须使用 ThreadLocal<Integer> 。后,在进行反射方法调用时,必须使用包装类型。

    总之,只要有选择,就应该优先使用基本类型,而不是包装类型。基本类型更简单、更快。如果必须使用包装类 型,请小心!自动装箱减少了使用包装类型的冗长,但没有减少危险。 当你的程序使用 == 操作符比较两个包装类 型时,它会执行标识比较,这几乎肯定不是你想要的。当你的程序执行包含包装类型和基本类型的混合类型计算时, 它将进行拆箱,当你的程序执行拆箱时,将抛出 NullPointerException。 后,当你的程序将基本类型装箱时,可能 会导致代价高昂且不必要的对象创建。

    2.盡量避免使用字符串,很常規的思路,不做過多闡述

    3. 盡量少用反射,反射的確可以可以實現對任何類的訪問,但是比較麻煩,并且不是很安全(編譯不檢查),性能也差些。下面寫一個例子

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    IO
    File
    jdbc
    HashMap
    网络通信
    lambda
    Queue
    反射
    Stack
    AC自动机题目选讲
  • 原文地址:https://www.cnblogs.com/CherryTab/p/11908879.html
Copyright © 2020-2023  润新知