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

Я новичок в Java и имею проблему проверки нулевого элемента в массиве integer. Я использую 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!');
            }
        }
    }

Ответы

Ответ 1

В Java, 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!');
            }
        }
    }

Ответ 2

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

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

Ссылки

Связанные вопросы


Вкл Integer vs int

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

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

Ссылки

Связанные вопросы


По последствиям Integer является ссылочным типом

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

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

По возможности, вы должны предпочесть примитивные типы для типов в штучной упаковке. Здесь цитата из Effective Java 2nd Edition, пункт 49: Предпочитают примитивные типы для вложенных в примитив примитивов (выделение автором):

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

Связанные вопросы


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

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

Связанные вопросы

См. также


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

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

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

Ссылки API

Ответ 3

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

Ответ 4

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

Ответ 5

Вы можете использовать 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 != '\0'){
            System.out.println(n);
        }else
            System.out.println("Null");
    }
}
}