Рассмотрим names[i].trim()
.
Когда names[i]
является строкой, у вас действительно есть что-то вроде someString.trim()
, которое отлично работает.
Когда names[i]
равно нулю, у вас действительно есть что-то вроде null.trim()
. Вы уже обнаружили, что null не допускает метод trim (). (На самом деле, я даже не совсем уверен, что такое «ноль».)
Следовательно, вы должны проверить на ноль, прежде чем вызывать trim ().
Если у вас есть a && b
, где a
и b
- выражения, проверки выполняются слева направо и анализатор останавливается, как только проблема решена. Таким образом, для логического и оператора (&&), если a
равно false, b
никогда не проверяется. Это то, что позволяет
if (a != null && a.trim().length() > 0) { ... }
на работу. если a
равно нулю, часть a.trim () не выполняется, поскольку она была бы бессмысленной с логической точки зрения; значение условного было решено.
Аналогично для
if (a == null || a.trim().length() == 0) { ... }
если a
равно нулю, то часть a.trim () никогда не выполняется, и мы не получаем ошибку.