最近在读《Thinking in Java》,其中讲到基本成员默认值的时候,有这样一段内容:
看到这,我想起自己之前有一次面试,被面试官问到过这个问题:
如果一个变量的作用域在整个类的范围,如果要程序编译通过,需要手动给它赋初始值吗?若是作用域只在某个方法或者方法中某个{}中,还需要赋初始值吗?
很遗憾,对于这样一个基础的问题,我回答错误。
(1)当某个基本数据类型作为类的成员变量时,Java会赋予一个默认值:
输出结果:
(2)当某个基本数据类型作为“局部变量”时,不会被初始化值,如下图,编译报错:Variable 'x' might not have been initialized
(3)那么如果某个字段是某个对象的引用,必须初始化该引用,以便与其一个实际的对象相关联。
拿最常用的List作为例子,当不初始化该类变量:
输出结果:
初始化之后:
输出结果:
那么作为“局部”类变量,结果如何?
编译直接报错了,验证了类变量必须初始化。
我发现其实越是基础的知识,越是容易混淆或者从来没有弄清楚过,只要一笔试,就看出了程序员的基本功,往往我有时候会害怕笔试,因为完成之后会让自己“原形毕露”。基础功应该是每个职位的必修课,加油吧!