据我所知,对变量进行初始化就是为它设置一个值。例如:
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:
局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。
回答了上述问题。
答案 0 :(得分:5)
但是,当声明String时,它是否自动初始化为null?因此,编译器不应该抛出错误。
不,这仅适用于班级变量。本地变量未分配默认值,但需要显式初始化。
由于String对象自动初始化为null,为什么下面的代码会打印一个空字符串?
String
对象永远不会初始化为null
。另一方面,班级String
参考是。