Java中字符串的初始化是否必要?

4
class TestMe{   
    public static void main (String args[]){
        String s3;  
        System.out.print(s3);
    }
}

为什么编译器会报错,参考对象的默认值是null,为什么不是输出结果...??
错误信息:变量s3可能未被初始化。

我已更改了类名,否则如果您的类被称为“Java”,可能会出现问题。 - doniyor
6个回答

5

这是一个错误,因为JLS在§14.4.2.执行本地变量声明:中规定:

如果声明符没有初始化表达式,则对变量的每个引用都必须先执行对变量的赋值,否则按照§16的规则将产生编译时错误。


2
本地变量在使用前应该进行初始化,在Java中,本地变量不会获得默认值,因此您的string s3不会像局部变量一样获得默认值null,这就是编译器错误的原因。
JLS中可以看到:
如果声明符没有初始化表达式,则对变量的每个引用都必须先执行变量的赋值,否则按照§16的规则将发生编译时错误。

1

null 的默认值仅适用于类的非 final 字段

所有其他情况都需要在首次使用之前进行初始化。


即使数组是局部变量,其单元格也会将其值初始化为默认值。 - Mik378
数组单元格不是字段。未初始化的数组例如 Object[] foo; 如果您使用 new Object[50] 分配数组,则 new 的属性是将所有内容设置为 0null(取决于类型)。 - Stephen Connolly
是的,每个单元格都使用数组类型的默认值进行初始化。我不仅谈论字段或未初始化的数组,而是适用于默认值的情况。例如,布尔数组的所有单元格都将初始化为“false”。 - Mik378
问题特别涉及到字段,我的回答也是针对这个的;-) - Stephen Connolly

0

是的,这是必要的。

String s3;
s3 = "Something....";
System.out.print(s3); // prints "Something..."

在使用局部变量之前,您必须对其进行初始化。


0

我知道的关于局部变量的是:
局部变量通常被声明用来进行一些计算。因此,给变量赋值是程序员的决定,它不应该采用默认值。如果程序员不小心未初始化局部变量,则它会采用默认值,然后输出结果就会错误。因此,在使用变量之前,局部变量会要求程序员进行初始化以避免犯错。


0

默认值被使用的唯一情况是当相关变量是对象的字段或数组的组成部分,甚至是局部变量。事实上,数组总是用适当的默认值初始化它们的单元。

因此,在你的情况下,你的变量不是来自一个字段(因为是方法的局部变量),也没有参与数组的初始化。所以编译器合理地抱怨..


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接