Java返回null和结果

时间:2018-10-10 13:48:55

标签: java

有人可以看一下这个例子,并告诉我为什么我将null10作为打印值而不是10吗?

并且在不使用全局String变量“ word”的情况下,该程序是否存在且更简单的解决方案

public class UserInput {

    public static String word;

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

        public static String getValue() {
            return word;
        }
    }

    public static class NumericInput extends TextInput {
        @Override
        public void add(char c) {
            if (Character.isDigit(c)){
                word = word + c;
            }
        }
    }

    public static void main(String[] args) {
        TextInput input = new NumericInput();
        input.add('1');
        input.add('a');
        input.add('0');
        System.out.println(input.getValue());

    }
}

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

4 个答案:

答案 0 :(得分:2)

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

如果您为您的类字段提供一个""(空字符串)的起始值,那么您的代码应达到您的期望。

关于执行此操作的更好方法,我改为给该类一个类型为StringBuilder的非静态字段(并对其进行初始化,使其不为null)。然后,您的add方法可以简单地将新字符append(c) StringBuilderword + c字段对象,这比重复使用字符串串联(这是Ionic Serve Now = 4769ms 所得到的)要更有效)。

答案 1 :(得分:1)

您没有初始化input,因此它是null。您需要先初始化input才能进行串联。

因此,使用此:

public static String word = "";

答案 2 :(得分:1)

您应该使用实例变量,而不是使用在TextInput类的所有实例和子实例之间共享的静态变量。

您仍然必须初始化一个非null值

看起来像

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());

其他内容,请参见@Bobulous有关使用StringBuilder的评论

答案 3 :(得分:0)

您没有初始化“单词”。

public class TextInput {
        public static String word=""; // a lil change here
        public static class TextInput {
            public void add(char c) {
                word += c;
            }
            public String getValue() {
                return word;
            }
        }
        public static class NumericInput extends TextInput {
            public void add(char c) {
                if (Character.isDigit(c)){
                    word += c;
                }
            }
        }
        public static void main(String[] args) {
            NumericInput input = new NumericInput();
           input.add('1');
           input.add('a');
           input.add('0');
           System.out.print(input.getValue());
        }
    }