一个char 不能完全代表一个code point,一个code point 可能会超过两个字节,一个char 表示不了,所以 code point 用 int 存储
字符串拼接
因为String不可变,每次拼接都会产生新的字符串,效率低,可以使用String.format()或者 new StringBuilder()
new StringBuffer() 是线程安全的,所以平常使用new StringBuilder()
初始化顺序
Init block 和 filed 都和声明顺序有关,但是都在constructor之前执行
变量初始化
Instance variables: are always initialized
Static variables: are always initialized
Local variables: must be initialized before use
局部变量声明后,Java虚拟机不会自动给它初始化为默认值,必须经过显示的初始化,才能使用。如果使用一个没有被初始化的局部变量,编译器会报错。
类的成员变量,Java虚拟机都会先自动给它初始化为默认值。
Java虚拟机会为数组的所有元素初始化为相应类型的默认值。引用类型被初始化为 null ,基本类型初始化为相应的值