Строка [] инициализируется нулем? - PullRequest
2 голосов
/ 14 апреля 2010

Привет, я столкнулся с этой проблемой: когда я инициализировал свою строку [], мне кажется, что в строке [] есть ноль, прежде чем я что-то делаю. Как я инициализировал String [], чтобы он был полностью пустым, т.е. без нуля в начале? Выход для следующего кода: <br>nullABC <br>nullABC <br>nullABC <br>nullABC <br>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 ]

14 голосов
/ 14 апреля 2010

Пустая ссылка примерно такая же пустая, как элемент строкового массива. Обратите внимание, что существует большая разница между ссылкой на пустую строку и пустой ссылкой. Просто измените свой код, чтобы использовать простое назначение вместо + =.

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");
}
4 голосов
/ 14 апреля 2010

Изменение:

inputArr[i] += "ABC";

Кому:

inputArr[i] = "ABC";

Или (как упоминал Джон Скит) вы можете использовать условный оператор для инициализации или объединения строк:

inputArr[i] = inputArr[i] == null ? "ABC" : inputArr[i] + "ABC";
1 голос
/ 14 апреля 2010

Нуль в массиве - это не строка "null", а значение null. Если вы хотите инициализировать его с пустыми строками, выполните:

for (int i = 0; i < inputArr.length; i++) {
    inputArr[i] = "";
}
0 голосов
/ 14 апреля 2010

Другие дали довольно хорошие ответы относительно «пустоты» массива и оператора присваивания. Просто позвольте мне добавить еще один способ инициализации массива:

String[] inputArr = new String[5];
java.util.Arrays.fill(inputArr, "ABC");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...