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

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

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

if(a[i] != null) {

Сообщение об ошибке от Eclipse:

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

В PHP это работает без любой проблемы, но в Java кажется, что я должен изменить тип массива от целого числа до Объекта заставить строку не жаловаться (как ниже)

Object[] a = new Object[3];

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

Код:

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!');
            }
        }
    }
14
задан Prince 29 December 2013 в 03:38
поделиться

4 ответа

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

Целые числа - это объектные оболочки вокруг целых чисел , то есть они могут быть нулевыми .

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!');
            }
        }
    }
23
ответ дан 1 December 2019 в 07:51
поделиться

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

3
ответ дан 1 December 2019 в 07:51
поделиться

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

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

Ссылки

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


На Integer vs int

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

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

Ссылки

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


О последствиях того, что Integer является ссылочным типом

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

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

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

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

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


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

Есть одно явное исключение, когда Integer должно использоваться вместо int : generics . Параметры типа в универсальных шаблонах Java должны быть ссылочными типами. Таким образом, вы НЕ МОЖЕТЕ иметь List в Java; вместо этого вы должны использовать List .

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

См. Также


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

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

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

Ссылки API

8
ответ дан 1 December 2019 в 07:51
поделиться

int - это примитивный тип в java, и он не может быть нулевым. Только объекты могут быть нулевыми.

1
ответ дан 1 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: