Хотя это было подробно обсуждено на различных форумах, включая 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
.
Спасибо за ваше время.
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
}
int
является примитивным типом и не является нулевым значением (он никогда не может быть null). Integer
- объект класса, который может быть нулевым, если он еще не был создан. Использование Integer
и int
не будет действительно влиять на что-либо с точки зрения функциональности, и ваш код будет вести себя одинаково, если вы изменили "int" на "Integer" повсюду.
int
на Integer
без потери функциональности.
Integer
вместоint
или если есть какие-то проблемы, делающие это.add(T item)
не может быть реализован. (посколькуint
не является подклассомObject
, аInteger
-). В наши дни автобокс скрывает большинство этих различий, но иногда все же важно понимать различия.