2017-03-03学习笔记

时间:2022-05-03
本文章向大家介绍2017-03-03学习笔记,主要内容包括一、String、二、jvm知识图谱、三、Treemap、LinkHashMap、四、sql模式、五、代码的执行顺序、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

一、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构造函数