почему int нельзя сравнивать с NULL, а Integer можно сравнивать с NULL

1

Хотя это было подробно обсуждено на различных форумах, включая SO и я прочитал большинство ответов экспертов. Но ниже проблема сбивает меня с толку.

У меня мало integer переменных, и мое требование - проверить значение null перед выполнением нескольких операторов. Поэтому сначала я объявил int (I don't have knowledge on int and Integer).

int a,b,c;
if(a == null) {
    //code here
}

Но complier не позволяет мне заявить об этом.

После поиска в google эксперты посоветовали мне использовать Integer вместо int и когда я изменил код, как показано ниже

Integer a,b,c;
if(a == null) {
   //code here
}

Это прекрасно с компилятором, поскольку Integer определяется как Object в java, а int - нет.

Теперь мой код стал некоторыми объявлениями с int и некоторыми с Integer.

Может ли кто-нибудь предложить, если объявление Integer даст тот же результат, что и int я могу изменить все мои объявления на Integer.

Спасибо за ваше время.

Теги:
integer
int

2 ответа

3
Лучший ответ
int a,b,c;
if (a == null) {
    //code here
}

Этот код не имеет смысла, поскольку примитивные типы int не могут быть нулевыми. Даже если вы считали автоматическое боксирование, int a гарантированно имеет ценность перед тем, как вставить его в бокс.

Integer a,b,c;
if (a == null) {
   //code here
}

Этот код имеет смысл, поскольку типы Object Integer могут быть нулевыми (без значения).

Что касается функциональности, то Object-vs встроенные типы действительно делают немного разницу (из-за их различной природы).

Integer a,b,c;
if (a == b) {
  // a and b refer to the same instance.
  // for small integers where a and b are constructed with the same values,
  // the JVM uses a factory and this will mostly work
  //
  // for large integers where a and b are constructed with the same values,
  // you could get a == b to fail
}

в то время как

int a,b,c;
if (a == b) {
  // for all integers were a and b contain the same value,
  // this will always work
}
  • 0
    Спасибо @Edwin Buck за ваш ответ ... У меня нет проблем при сравнении с переменной, но в моем приложении есть некоторые функции, которые заставляют меня сравнивать с нулем ... Можете ли вы посоветовать мне использовать Integer вместо int или если есть какие-то проблемы, делающие это.
  • 0
    Использование Integer важно при работе с предметами, которые должны взять объект. Например, у вас может быть ArrayList <Integer>, но у вас не может быть ArrayList <int>; потому что int нельзя привести к Object, поэтому метод add(T item) не может быть реализован. (поскольку int не является подклассом Object , а Integer -). В наши дни автобокс скрывает большинство этих различий, но иногда все же важно понимать различия.
Показать ещё 3 комментария
3

int является примитивным типом и не является нулевым значением (он никогда не может быть null). Integer - объект класса, который может быть нулевым, если он еще не был создан. Использование Integer и int не будет действительно влиять на что-либо с точки зрения функциональности, и ваш код будет вести себя одинаково, если вы изменили "int" на "Integer" повсюду.

  • 0
    @RhinoFeeder .. Спасибо за ваш ответ ... Так что я могу изменить все свои declerations с int на Integer без потери функциональности.
  • 0
    Верный. Они будут функционировать одинаково.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню