class TestMe{
public static void main (String args[]){
String s3;
System.out.print(s3);
}
}
为什么编译器会报错,参考对象的默认值是null,为什么不是输出结果...??
错误信息:变量s3可能未被初始化。
class TestMe{
public static void main (String args[]){
String s3;
System.out.print(s3);
}
}
string s3
不会像局部变量一样获得默认值null,这就是编译器错误的原因。null
的默认值仅适用于类的非 final
字段。
所有其他情况都需要在首次使用之前进行初始化。
Object[] foo;
如果您使用 new Object[50]
分配数组,则 new
的属性是将所有内容设置为 0
或 null
(取决于类型)。 - Stephen Connolly是的,这是必要的。
String s3;
s3 = "Something....";
System.out.print(s3); // prints "Something..."
在使用局部变量之前,您必须对其进行初始化。
我知道的关于局部变量的是:
局部变量通常被声明用来进行一些计算。因此,给变量赋值是程序员的决定,它不应该采用默认值。如果程序员不小心未初始化局部变量,则它会采用默认值,然后输出结果就会错误。因此,在使用变量之前,局部变量会要求程序员进行初始化以避免犯错。
默认值被使用的唯一情况是当相关变量是对象的字段或数组的组成部分,甚至是局部变量。事实上,数组总是用适当的默认值初始化它们的单元。
因此,在你的情况下,你的变量不是来自一个字段(因为是方法的局部变量),也没有参与数组的初始化。所以编译器合理地抱怨..