Можно ли сравнить int и null?

277
13 апреля 2018, 18:21

Такая конструкция

int pages ;
if (pages = null) {
    pages = 25;
} else {
    pages = Integer.parseInt(request.getParameter("pages"));
}

выдает ошибку в строке if (pages = null) { из-за несовпадения типов:

incompatible types: <null> cannot be converted to int
incompatible types: int cannot be converted to boolean

Есть ли возможность сравнить целое число на значение null, или я пишу глупость?

Answer 1

Если вам нужно исправить код, то это будет так.

(исправленный исходный код от автора)

int pages;
if (pages == 0) {
    pages = 25;
} else {
    pages = request.getParameter();
}
Integer integer = pages;

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

Может вам по началу будет удобно запомнить: все примитивные типы начинаются с маленькой буквы (boolean, int, double, float), а ссылочные с большой.

(исправленный исходный код из комментариев) - спасибо pavlofff

Integer pages;
try{
    pages = Integer.parseInt(request.getParameter("pages"));
} catch (Exception e){
    pages = 25;
}
Answer 2

Есть ли возможность сравнить целое число на значение null?

Нельзя. Примитивные типы не могут принимать значение null. Соответственно, сравнивать с null их нельзя.

Как вариант, можно привести число к объекту-обертке:

Integer pages = null;
if(pages == null) { 
     ...

Приведение к null — не единственная проблема в Вашем примере:

  • переменные в Java требуют инициализации: если pages — локальная переменная, то компилятор не даст ее использовать до того как ей присвоено значение, если же pages — поле класса, то ему будет присвоено значение по умолчанию — 0;
  • сравнение в Java выполняется оператором ==, Вы же пытаетесь присвоить pages значение и результат присвоения использовать в качестве аргумента if. Т.к. if принимает буллево значение, это приводит ко второй ошибке.
READ ALSO
Конверт в RealmList

Конверт в RealmList

Никто не подскажет как можно правильно конвертить в RealmList<> например Map<String, String> ну или List<SomeClass>?

177
Передача данных ArrayList

Передача данных ArrayList

В приложении для android у меня есть три Activity, Activity1, Activity2, Activity3 все они открываются в таком же порядкеЯ пытаюсь передать из Activity1 данные ArrayList...

200
Результат не хочет каститься. NamedNativeQuery - SqlResultSetMapping

Результат не хочет каститься. NamedNativeQuery - SqlResultSetMapping

Собственно он не хочет работать:

195