Что польза эквивалентна спискам Perl в ударе?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

24
задан codeforester 12 March 2019 в 19:04
поделиться

4 ответа

удар (в отличие от POSIX sh) поддерживает массивы:

fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
  echo "${fruit}"
done

Это имеет преимущество, что элементы массива могут содержать пробелы или других членов $IFS; пока они были правильно вставлены как отдельные элементы, они считаны тот же путь.

45
ответ дан Charles Duffy 28 November 2019 в 22:37
поделиться

Как это:

FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
  echo $FRUIT
done

Уведомление это не будет работать, если будут пробелы на названия Ваших фруктов. В этом случае см. этот ответ вместо этого, который является немного менее портативным, но намного более устойчивым.

11
ответ дан Community 28 November 2019 в 22:37
поделиться

Теперь, когда ответ, который я люблю, был принят как корректный ответ, я теперь перемещусь в другую тему: как использовать IFS для личной выгоды.:-P

fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
 for fruit in $fruits; do
     echo "$fruit"
 done)

я поместил код в скобках так, чтобы эти IFS изменение было изолировано в его собственный подпроцесс; таким образом в конце раздела на кронштейнах, IFS вернулся назад к его старому значению.:-)

6
ответ дан Chris Jester-Young 28 November 2019 в 22:37
поделиться
for i in apple orange kiwi
do
  echo $i
done
4
ответ дан JBB 28 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: