返回null和结果的Java

返回null和结果的Java,java,Java,有人能看一下这个例子,告诉我为什么我得到的是空值10而不是仅仅10吗 这个程序有没有更简单的解决方案而不用全局字符串变量“word” 编辑:我需要使用从TextInput继承的内容您没有初始化输入,因此它是空的。您需要先初始化输入,才能使串联工作 因此,请使用以下命令: public static String word = ""; 您没有初始化输入,因此它是空的。您需要先初始化输入,才能使串联工作 因此,请使用以下命令: public static String word = ""; 您需

有人能看一下这个例子,告诉我为什么我得到的是空值10而不是仅仅10吗

这个程序有没有更简单的解决方案而不用全局字符串变量“word”


编辑:我需要使用从TextInput继承的内容

您没有初始化
输入
,因此它是
空的
。您需要先初始化
输入
,才能使串联工作

因此,请使用以下命令:

public static String word = "";

您没有初始化
输入
,因此它是
空的
。您需要先初始化
输入
,才能使串联工作

因此,请使用以下命令:

public static String word = "";

您需要为静态
word
字段提供一个初始值,否则它将默认为
null
。当Java连接字符串对象时,它会将
null
引用视为文本字符串“null”。因此,您实际上总是以字符串“null”开头

如果将类字段的起始值设置为
(空字符串),则代码应按预期执行


关于更好的方法,我会给这个类一个类型为
StringBuilder
的非静态字段(并初始化它,使其不为
null
)。然后,您的
add
方法可以简单地
将(c)
新字符附加到
StringBuilder
字段对象,这将比重复使用字符串连接(这是通过
word+c
得到的)更有效。

您需要为静态
word
字段提供一个初始值,否则它将默认为
null
。当Java连接字符串对象时,它会将
null
引用视为文本字符串“null”。因此,您实际上总是以字符串“null”开头

如果将类字段的起始值设置为
(空字符串),则代码应按预期执行


关于更好的方法,我会给这个类一个类型为
StringBuilder
的非静态字段(并初始化它,使其不为
null
)。然后,您的
add
方法可以简单地
将(c)
新字符附加到
StringBuilder
字段对象,这将比重复使用字符串连接(这是通过
word+c
得到的)更有效.

与其使用在TextInput类的所有实例和子类上共享的静态变量,不如使用实例变量

您仍然需要初始化一个非空值

那看起来像

public static class TextInput {
    protected String word;

    public TextInput() {
        this.word = ""; 
    } 

    public void add(char c) {
        word = word + c;
    }

    public String getValue() {
        return word;
    }
}
为了更好地理解问题,请使用以下代码尝试您的代码

    TextInput input = new TextInput();
    input.add('a');
    System.out.println(input.getValue());
    TextInput input2 = new NumericInput();
    input2.add('1');
    input2.add('0');
    System.out.println(input2.getValue());

另外,请参阅关于使用StringBuilder的@Bobulous注释,而不是使用在TextInput类的所有实例和子类上共享的静态变量,您应该使用实例变量

您仍然需要初始化一个非空值

那看起来像

public static class TextInput {
    protected String word;

    public TextInput() {
        this.word = ""; 
    } 

    public void add(char c) {
        word = word + c;
    }

    public String getValue() {
        return word;
    }
}
为了更好地理解问题,请使用以下代码尝试您的代码

    TextInput input = new TextInput();
    input.add('a');
    System.out.println(input.getValue());
    TextInput input2 = new NumericInput();
    input2.add('1');
    input2.add('0');
    System.out.println(input2.getValue());

另外,请参阅关于使用StringBuilder的@Bobulous注释,因为您没有初始化“word”


您没有初始化“单词”


word=word+c
第一次调用
add
word
null
,因为您从未初始化过它,所以
word
变成
null
加上您调用的
add
word=word+c
第一次调用
add
word
null
,因为您从未初始化过它,所以
word
变成
null
加上您所调用的
add