11 ответов:
есть ключевое различие между a
nullмассив и пустой массив. Это тест дляnull.int arr[] = null; if (arr == null) { System.out.println("array is null"); }"пустой" здесь не имеет никакого официального значения. Я выбираю, чтобы определить пустой как имеющий 0 элементов:
arr = new int[0]; if (arr.length == 0) { System.out.println("array is empty"); }альтернативное определение "пустой", если все элементы
null:Object arr[] = new Object[10]; boolean empty = true; for (int i=0; i<arr.length; i++) { if (arr[i] != null) { empty = false; break; } }или
Object arr[] = new Object[10]; boolean empty = true; for (Object ob : arr) { if (ob != null) { empty = false; break; } }
ArrayUtils.isNotEmpty(testArrayName)из пакетаorg.apache.commons.lang3гарантирует, что массив не является нулевым или пустым
посмотрите на его длину:
int[] i = ...; if (i.length == 0) { } // no elements in the arrayхотя это безопаснее, чтобы проверить на null в то же время:
if (i == null || i.length == 0) { }
Я из .net фона. Однако java / c# более / менее одинаковы.
если вы создаете экземпляр непримитивного типа (массив в вашем случае), он не будет null.
например,int[] numbers = new int[3];
В этом случае пространство выделяется и каждый элемент имеет значение по умолчанию 0.будет
null, если неnewего.
например,int[] numbers = null; // changed as per @Joachim's suggestion. if (numbers == null) { System.out.println("yes, it is null. Please new it up"); }
массив int инициализируется нулем, поэтому он фактически никогда не будет содержать нулей. Только массивы объекта будут содержать null изначально.
дело здесь очень просто в том, что переменная k не является нулем, потому что она указывает на массив. Не имеет значения, что сам массив пуст. Нулевой тест в вашем сообщении будет оцениваться только как true, если переменная k ни на что не указывает.
Я проверил, как показано ниже. Надеюсь, это поможет.
Integer[] integers1 = new Integer[10]; System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array for (Integer integer : integers1) { System.out.println(integer); //prints all 0s } //But if I manually add 0 to any index, now even though array has all 0s elements //still it is not empty // integers1[2] = 0; for (Integer integer : integers1) { System.out.println(integer); //Still it prints all 0s but it is not empty //but that manually added 0 is different } //Even we manually add 0, still we need to treat it as null. This is semantic logic. Integer[] integers2 = new Integer[20]; integers2 = null; //array is nullified // integers2[3] = null; //If I had int[] -- because it is priitive -- then I can't write this line. if (integers2 == null) { System.out.println("null Array"); }
An
intмассив без элементов не обязательноnull. Это будет толькоnullесли он еще не выделен. Смотрите в этом уроке для получения дополнительной информации о Java массивы.вы можете проверить длину массива:
void foo(int[] data) { if(data.length == 0) return; }
вы также можете проверить, есть ли какие-либо элементы в массиве, выяснив его длину, а затем поместить его в Оператор if-else, чтобы проверить, является ли он нулевым.
int[] k = new int[3]; if(k.length == 0) { //do something }
public boolean empty() { boolean isEmpty = true; int i = 0; for (int j = 0; j < array.length; j++) { if (array[j] != 0) { i++; } } if (i != 0) { isEmpty = false; } return isEmpty; }Это так близко, как я должен проверить, если массив пуст. Хотя это не будет работать, когда ints в массиве фактически равны нулю. Он будет работать для {1,2,3}, и он все равно вернет false, если {2,0} но {0} вернет true
Я считаю, что вы хотите
int[] k = new int[3]; if (k != null) { // Note, != and not == as above System.out.println(k.length); }вы обновили его, так что он никогда не будет null.
Comments