Например, если массив в Java: nums
Когда мы оправдываем ли nums
пуста или нет, мы должны DO-Почему мы должны делать это, когда оправдываем массив пустым?
if(nums == null || nums.length == 0)
вместо просто
if(nums.length == 0)
почему?
Например, если массив в Java: nums
Когда мы оправдываем ли nums
пуста или нет, мы должны DO-Почему мы должны делать это, когда оправдываем массив пустым?
if(nums == null || nums.length == 0)
вместо просто
if(nums.length == 0)
почему?
Вы должны убедиться, что nums
не является неопределенным первым, иначе попытка ссылки на свойство из неопределенного или нулевого объекта приведет к NullPointerException
.
Кроме того, каждый из кусков кода имеет две совершенно разные вещи, и ваш случай, либо будет достаточно, как о том, что вы не должны «сделать что-то» с массивом:
nums == null // This checks if your array exists
nums.length == 0 // This checks if your array has no elements
«null» и «undefined» - это не одно и то же. На самом деле Java не использует этот термин. Он может быть «необъявленным» (вызвавший ошибку компиляции) или «неназначенным» (также компиляцией), но ссылочное значение «null» по-прежнему является четко определенным значением. – Andreas
Это хороший момент @ Andreas. Прошло довольно много времени с тех пор, как я написал любую Java. Не стесняйтесь редактировать ответ, если вы чувствуете, что можете сделать его немного более «точным для Java». –
Рассмотрим этот набор методов:
public void breakEverything() {
MyClass[] bob;
// pass a null object to iterateArray
iterateArray(bob);
}
public void dontBreakStuff() {
MyClass[] bob = new MyClass[0];
// pass an array of length 0 to iterateArray
iterateArray(bob);
}
public void iterateArray(int[] arr) {
for (int i == 0; i < arr.length; i++) {
doSomethingWith(arr[i]);
}
}
Там на самом деле пара вещей происходит здесь:
В случае метода breakEverything()
- you'r e передает нулевую ссылку в метод iterateArray()
. То есть аргумент arr
имеет значение NULL, и, таким образом, вызов любых методов или обращение к любым переменным в этом аргументе вызовет NPE. Вы защищаете против этого, в том числе проверки:
if (arr == null) {
return;
}
Там в второй проблемы здесь с вопросом, хотя:
Когда мы оправдываем ли пусто НУМС или нет, мы должны делать, если (Nums = = нуль || nums.length == 0), а не только если (nums.length == 0)
проблема здесь состоит в том, что MyClass[].length()
возвращает выделяется емкость массива, он фактически не возвращает количество элементов, которые вы разместили в массиве, то есть не считая числа ненулевых указателей. Возможно, вы думаете о ArrayList.size()
, который фактически подсчитывает количество элементов в списке, а не выделенное пространство (это потому, что ArrayList может расти и сокращаться по размеру, где в качестве примитивного массива не может).
Если массив не инициализирован данными i.е
int[] nums=null;
if(nums.length==0){}
дает NullPointerException - потому, что вы пытаетесь получить доступ к информации, которая не существует
Если вы объявили, но не инициализируется массив со nums
int[] nums ;
if(nums==null || nums.length==0){}
дает сборник error - так как вы не инициализированы и пытаетесь получить к нему доступ
Короче nums==null
это проверить Null
Поскольку существует разница между массивом не существующим и массивом, не имеющем элементов. – nhouser9
Чтобы позволить вызывающему абоненту передать значение «null» вместо создания массива 0-го размера, если данные не передаются. – Andreas
Почему бы вам не установить 'nums = null' и попробовать оба и посмотреть, что вы получаете? –