1. 程式人生 > 其它 >2017-03-03學習筆記

2017-03-03學習筆記

一、String

StringBuffer.toString()原始碼:

@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, 0, count);
    }
    return new String(toStringCache, true);
}

Arrays.copyOfRange用的是System.arraycopy

public static char[] copyOfRange(char[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        char[] copy = new char[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }

1.String是值傳入,不是引用傳入。 2.String對String 型別進行改變的時候其實都等同於生成了一個新的 String 物件,然後將指標指向新的 String 物件,而不是StringBuffer;StringBuffer每次結果都會對 StringBuffer 物件本身進行操作,而不是生成新的物件,再改變物件引用。 3.效率比較String

二、jvm知識圖譜

引用自知乎

三、Treemap、LinkHashMap

1.TreeMap取出來的是排序後的鍵值對。但如果您要按自然順序或自定義順序遍歷鍵,那麼TreeMap會更好。 2.LinkedHashMap 是HashMap的一個子類,如果需要輸出的順序和輸入的相同,那麼用LinkedHashMap可以實現,它還可以按讀取順序來排列。

四、sql模式

MySQL資料庫中,變數分為 系統變數(以”@@”開頭)和使用者自定義變數。系統變數分為全域性系統變數(global)和會話系統變數(session)。 @@global 僅用於訪問全域性系統變數的值; @@session 僅用於訪問會話系統變數的值; @@ 先訪問會話系統變數的值,若不存在則去訪問全域性系統變數的值; sql_mode 為系統變數,既是全域性系統變數,又是會話系統變數。

五、程式碼的執行順序

父類B靜態程式碼塊->子類A靜態程式碼塊->父類B非靜態程式碼塊->父類B建構函式->子類A非靜態程式碼塊->子類A建構函式