在下面的代码中,如果我保留未初始化的String名称,则会出现编译错误,但char初始化没有问题未被初始化。为什么这种行为有所不同?
class Demo {
public static void main(String[] args) {
char initial;
String name;
for (String input: args) {
name += input;
initial = input.charAt(0);
System.out.print(initial + " ");
}
}
答案 0 :(得分:10)
您在读取之前(在System.out.println()
行中)分配了char,但是在读取之前您没有分配字符串,这发生在name += input
行。
答案 1 :(得分:3)
name += input;
相当于
name = name + input;
您正在使用name
(本地变量)而未初始化它。这是错误的原因。具体来说,您尝试使用name
连接未初始化的input
。
initial = input.charAt(0);
在这里,您在print语句中使用它之前正在初始化它。因此没有错误。
答案 2 :(得分:2)
首次使用初始值时,将其设置为值:
initial = input.charAt(0);
第一次使用名称时,它在计算中使用空值:
name += input; // is equivalent to
name = null + input;
由于名称尚未初始化(参见+ =的含义)。
答案 3 :(得分:0)
char是一个原语,它们会自动初始化(如果char为\ u0000)。既然你没有初始化name,那么name + = input是没有意义的。您可能打算使用值“”开始名称。