基础数据类型、数组、集合类的初始化
总结 Java 基础数据类型、数组、集合类进行初始化的相关知识与技巧。
1. 默认初始化值
Java 的基础数据类型以及对象的默认初始化值如下:
1 | // Ref: https://stackoverflow.com/questions/13972617/primitives-objects-declaration-default-initialization-values |
需要注意的是,Java 中只会给类的成员变量(class members)分配初始值,而局部变量(local variable)则不会被分配初始值,必须自己初始化,否则会报编译错误,参考下面的例子。
1 | // Ref: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html |
2. 初始化方法
介绍数组和集合类的初始化方法,在Leetcode 编程题中使用非常多。
2.1 数组
对于数组来说,特别要注意的是初始化的时候必须要指明它的长度,并且一经生成,数组的长度就不能再变化。
初始化数组通常有两种方案,一种是在分配存储空间的同时初始化值:
1 | // Ref: https://stackoverflow.com/questions/1938101/how-to-initialize-an-array-in-java |
另一种则是先分配存储空间,由系统分配默认值:
1 | // 声明并使用系统默认值(int 默认值为0)初始化一个长度为10 的整型数组 |
2.2 集合框架
一般的,Java 集合类都是仅使用 new 关键字创建对象,而不在创建对象的同时进行值初始化(一般是后续通过add()
等方法向集合类中添加元素)。
一种更加紧凑的方式来初始化集合类是使用匿名内部类+初始化代码块的方法ref,如下:
1 | // 初始化 list |
上述的初始化方法也称为 double brace initialization 法,该方法的优缺点可以参考Java:Double Brace Initialization. 由于该方法存在的缺点,另一种提升代码简洁性的方法是自己构造一个集合初始化的帮助类,来简化元素添加操作。
具体原理是双层花括号中,外层花括号表示创建了一个匿名内部类,内层的花括号则是该匿名内部类的初始化代码块(instance initialization block)。最终,在初始化代码块中调用 add()
方法初始化该匿名内部类然后将其赋给声明的对象。
Ref: