局部变量字符串可能尚未初始化特性

时间:2014-10-08 21:19:03

标签: java string object

据我所知,对变量进行初始化就是为它设置一个值。例如:

String s;        // declaring the String (throws an error if you use in conditionals)
String s = null; // declaring and then initializing the String (no error)

但是,当声明String时,它是否会自动初始化为null?因此,编译器不应该抛出错误。

我还注意到String s = new String();与条件语句一起使用时不会产生任何错误,但String s;会出现错误。我认为这两个陈述基本上是相同的,后者甚至比前者更受鼓舞。

我的问题是,为什么String s = new String();有效但String s;无效(使用条件设定值时)?两个字符串不应自动初始化为null,因此不会导致错误吗?

加分问题:由于String个对象会自动初始化为null,为什么以下代码会打印为空String

String s  = new String();
System.out.println(s);

编辑:显然,当我累了,我不会直接思考。整个问题一团糟,我不知道我在想什么。向那些不得不尝试理解它的人道歉。

此外,默认值为Oracle docs

  

局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。

回答了上述问题。

1 个答案:

答案 0 :(得分:5)

  

但是,当声明String时,它是否自动初始化为null?因此,编译器不应该抛出错误。

不,这仅适用于班级变量。本地变量未分配默认值,但需要显式初始化。

  

由于String对象自动初始化为null,为什么下面的代码会打印一个空字符串?

String 对象永远不会初始化为null。另一方面,班级String 参考是。