Как проверить нулевой элемент, если это целочисленный массив в Java?

Я совершенно новичок в Java и имею проблему с проверкой нулевого элемента в целочисленном массиве. Я использую Eclipse для редактора, и строка, которая проверяет нулевой элемент, показывает ошибку:

линия, которая жалуется:

if(a[i] != null) {

ошибка msg из Eclipse:

The operator != is undefined for the argument type(s) int, null

в PHP это работает без каких-либо проблем, но в Java кажется, что мне нужно изменить тип массива с integer на Object, чтобы строка не жаловалась (как показано ниже)

Object[] a = new Object[3];

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

код:

public void test() {
        int[] a = new int[3];
        for(int i=0; i<a.length; i++) {
            if(a[i] != null) { //this line complains...
                System.out.println('null!');
            }
        }
    }

5 ответов


на Java, an int является примитивным типом и не может быть null. Однако объекты хранятся как ссылки, поэтому, если вы объявите ссылку на объект, но не сделаете new "объект", ссылка будет null.

Integers являются обертками вокруг объекта ints, то есть они могут быть null.

public void test() {
        Integer[] a = new Integer[3];
        for(int i=0; i<a.length; i++) {
            if(a[i] != null) { //should now compile
                System.out.println('null!');
            }
        }
    }

о примитивных vs ссылочных типах

An int является примитивным типом, который отличается от ссылочного типа. Только ссылочные типы могут иметь значение null.

ссылки

вопросы


On Integer vs int

java.lang.Integer фактически является ссылочным типом, обозначенным типом " box " для примитивного типа int. Таким образом,Integer переменная может иметь значение null.

С введением autoboxing в Java, преобразования из int to Integer и наоборот можно сделать неявно. Но имейте имейте в виду, что они очень разные типы, и на самом деле попытка распаковки null бросит NullPointerException.

ссылки

вопросы


о последствиях Integer быть ссылка типа

одно следствие уже упомянуто: an Integer переменная может иметь null значение. Другой - это то, что == оператор на два Integer является эталонным сравнением идентичности, а не числовым равенством.

System.out.println(new Integer(0) == new Integer(0)); // prints "false"

по возможности, вы должны предпочесть примитивные типы коробочным типам. Вот цитата из эффективное Java 2nd Edition, пункт 49: предпочитайте примитивные типы коробочным примитивам (курсив автора):

в общем, используйте примитивы в предпочтении к коробочному примитиву всякий раз, когда у вас есть выбор. Примитивные типы проще и быстрее. Если вы должны использовать коробочные примитивы, будьте осторожны! Autoboxing уменьшает многословие, но не опасность, использования коробочных примитивов. Когда ваша программа сравнивает два коробочных примитива с == оператор, он делает сравнение идентичности, которое почти наверняка не то, что вы хотите. Когда ваша программа выполняет вычисления смешанного типа с использованием коробочных и распакованных примитивов, она распаковывает и когда ваша программа делает распаковку, она может бросить NullPointerException. Наконец, когда ваша программа помещает примитивные значения, это может привести к дорогостоящим и ненужным созданиям объектов.

вопросы


, когда Integer необходимо использовать

есть одно вопиющее исключение, где Integer необходимо использовать над int: дженерики. Параметры типа в Java generics должны быть ссылочными типами. Так что вы не можете иметь List<int> в Java, вы должны использовать List<Integer> вместо.

вопросы

см. также


при использовании соответствующей структуры данных

если вы должны есть int[], что разрешение null значения, затем быстрый ответ-использовать Integer[]. Поскольку теперь у вас есть массив ссылочные типы, некоторые элементы могут быть null. Имейте в виду все последствия работы со ссылочными типами, или вы можете столкнуться с сюрпризами.

на данный момент, однако, я бы серьезно рассмотрел использование (см. эффективное Java 2nd Edition: предпочитайте списки массивам). Списки гораздо более многофункциональны, чем массивы, и хорошо взаимодействуют с большей платформой коллекций Java.

API-интерфейс ссылки


An ' int ' не может быть null. Целое число (которое является объектом) может. Итак, как сказал @Justin, Integer[] позволит вам проверить на null, но если int[] работает для вас, вам не нужно беспокоиться о тестировании на null, потому что это не может произойти.


int является примитивным типом в java и не может быть null. Только объекты могут быть null.


вы можете использовать arr[i]!= '\0', как это. У меня получилось.

public class IntNullCheck {
public static void main(String[] args) {

    int[] intarr = new int[5];
    intarr[0] = 7;
    intarr[3] = 9;

    for(int n : intarr){
        if(n != ''){
            System.out.println(n);
        }else
            System.out.println("Null");
    }
}
}