实例字段被初始化为null、0等。局部字段不会被初始化。除非尝试使用该字段并生成异常,否则无法测试这一点。一个好的实践是在声明局部变量时始终进行初始化。
如果是字段变量,您可以通过比较int
与默认值0
来进行检查:
private int x: // default 0 for an int
...
public void foo(){
if (x == 0){ // valid check
// ...
}
}
默认值
在声明字段时,不一定总是需要分配一个值。声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,这个默认值将取决于数据类型,通常为零或null。然而,依赖这种默认值通常被认为是不好的编程风格。
以下图表总结了上述数据类型的默认值。
数据类型 默认值(对于字段) byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char '\u0000' String(或任何对象) null boolean false
对于局部变量,不需要检查甚至也不可能检查,因为编译器会为您检查。如果任何语句引用未初始化的变量,则编译将无法通过。因此,检查int
局部变量的代码本身也不会编译通过。
public void foo(){
int a;
if (a==0) { // doesn't compile : The local variable a may not have been initialized
...
}
}
int
是一个字段还是局部变量? - Logan