2

在下面的代码中,如果未初始化字符串名称,则会出现编译错误,但未初始化字符初始没有问题。为什么会有这种行为差异?

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 + " ");
        }
    }
4

4 回答 4

10

您在读取它之前分配了字符(在该System.out.println()行中),但您没有在读取它之前分配字符串,这发生在该name += input行中。

于 2012-10-22T05:57:17.963 回答
3
name += input;

相当于

name = name + input;

您正在使用name(局部变量)而不对其进行初始化。这是错误的原因。具体来说,您正在尝试将未初始化nameinput.

initial = input.charAt(0); 

在这里,您在 print 语句中使用它之前对其进行初始化。因此没有错误。

于 2012-10-22T05:57:49.710 回答
2

第一次使用 initial 时,它被设置为一个值:

initial = input.charAt(0);

第一次使用名称时,它在计算中使用空值:

name += input; // is equivalent to
name = null + input;

由于 name 尚未初始化(参见 += 的含义)。

于 2012-10-22T05:59:08.510 回答
0

char 是一个原语,它们会自动初始化(如果 char 为 \u0000)。既然您没有初始化名称,那么 name+= 输入就没有意义了。您可能打算以“”值开始名称。

于 2012-10-22T06:00:54.247 回答