在java中,为什么未初始化的char是OK但不是String

时间:2012-10-22 05:54:18

标签: java initialization

在下面的代码中,如果我保留未初始化的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 + " ");
        }
    }

4 个答案:

答案 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是没有意义的。您可能打算使用值“”开始名称。