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
1.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。 2.LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列。
MySQL数据库中,变量分为 系统变量(以”@@”开头)和用户自定义变量。系统变量分为全局系统变量(global)和会话系统变量(session)。 @@global 仅用于访问全局系统变量的值; @@session 仅用于访问会话系统变量的值; @@ 先访问会话系统变量的值,若不存在则去访问全局系统变量的值; sql_mode 为系统变量,既是全局系统变量,又是会话系统变量。
父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数