Хобрук: Ваш путь к мастерству в программировании

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

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

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

if(a[i] != null) {

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

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

В PHP это работает без проблем, но в Java кажется, что мне нужно изменить тип массива с целого числа на 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!');
            }
        }
    }
13.06.2010

Ответы:


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!');
            }
        }
    }
13.06.2010
  • Очень интересно, я не знал, что int и Integer разные .. Спасибо за подсказку! 13.06.2010
  • Если у вас есть Integer[] и вы просто хотите проверить, есть ли какие-либо null элементы, Arrays.asList(array).contains(null). 13.06.2010
  • или лучше, класс Common-Utils ArrayUtils.IsEmpty () 14.06.2010

  • 2

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

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

    использованная литература

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


    On Integer vs int

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

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

    использованная литература

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


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

    Одно следствие уже упоминалось: переменная Integer может иметь значение null. Еще одна проблема заключается в том, что оператор == над двумя Integer является сравнительным сравнением идентичности, а не численным равенством.

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

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

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

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


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

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

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

    Смотрите также


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

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

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

    Ссылки API

    13.06.2010

    3

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

    13.06.2010

    4

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

    13.06.2010

    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");
        }
    }
    }
    
    02.03.2016
    Новые материалы

    Разработчики — Избегайте сложностей глупо
    Сложность управляется, а не побеждается «Простота — великая добродетель, но для ее достижения требуется тяжелая работа и образование, чтобы оценить ее. И что еще хуже: сложность продается..

    Как сделать HTML динамическим с помощью JavaScript
    Код JavaScript выполняется внутри страниц сайта. Таким образом, страница вашего сайта содержит метки HTML, а также пояснения (скрипты), составленные с использованием диалекта сценариев, такого как..

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..