String []由null初始化?

时间:2010-04-14 15:04:41

标签: java

嗨我遇到了这个问题,当我初始化我的String []时,在我做任何事情之前,String []中似乎有一个null。如何将String []初始化为完全为空,即。一开始没有null? 以下代码的输出是:
nullABC
nullABC
nullABC
nullABC
nullABC

public static void main(String[] args){
    String[] inputArr = new String[5];
    for (int i = 0; i< inputArr.length; i++){
        inputArr[i] += "ABC";
    }
    for (int i = 0; i< inputArr.length; i++){
        System.out.println(inputArr[i]);
    }
}

}

4 个答案:

答案 0 :(得分:14)

空引用与字符串数组元素一样空。请注意,对空字符串的引用与空引用之间存在很大差异。只需将代码更改为使用简单赋值而不是+ =。

for (int i = 0; i< inputArr.length; i++){
    inputArr[i] = "ABC";
}

如果您需要在其他地方进行条件连接,请使用以下内容:

for (int i = 0; i< inputArr.length; i++) {
    String current = inputArr[i];
    String suffix = "ABC";
    String replacement = current == null ? suffix : current + suffix;
    inputArr[i] = replacement;
}

或者,您可以使用以下内容:

public static String emptyForNull(String x) {
    return x == null ? "" : x;
}

然后:

for (int i = 0; i< inputArr.length; i++){
    inputArr[i] = emptyForNull(inputArr[i]) + "ABC";
}

或(是的,很多的可用选项):

public static String nullAwareConcat(String x, String y) {
    return x == null && y == null ? ""
        : x == null ? y
        : y == null ? x
        : x + y;
}

...

for (int i = 0; i< inputArr.length; i++){
    inputArr[i] = nullAwareConcat(inputArr[i], "ABC");
}

答案 1 :(得分:4)

变化:

inputArr[i] += "ABC";

要:

inputArr[i] = "ABC";

或者(像Jon Skeet提到的那样)你可以使用条件语句来初始化或连接字符串:

inputArr[i] = inputArr[i] == null ? "ABC" : inputArr[i] + "ABC";

答案 2 :(得分:1)

数组中的null不是字符串"null",而是值null。如果要使用空字符串对其进行初始化,请执行以下操作:

for (int i = 0; i < inputArr.length; i++) {
    inputArr[i] = "";
}

答案 3 :(得分:0)

其他人对数组和赋值运算符的“空虚”给出了很好的答案。让我添加另一种初始化数组的方法:

String[] inputArr = new String[5];
java.util.Arrays.fill(inputArr, "ABC");