尽管已经在包括SO
在内的各种论坛中对此进行了详细讨论,但我已经阅读了大部分专家的回复,但下面的问题让我感到困惑。
我有几个integer
个变量,我的要求是在执行几个语句之前检查null
。所以首先我声明为int (I don't have knowledge on int and Integer)
。
int a,b,c;
if(a == null) {
//code here
}
但是编纂者不允许我这样声明。
在谷歌搜索后,专家建议我使用Integer
代替int
,当我像下面的代码一样更改时
Integer a,b,c;
if(a == null) {
//code here
}
编译器没问题,因为Integer
在java中定义为Object
而int
不是。{/ p>
现在我的代码已成为int
的一些声明,Integer
的声明。
有人建议,如果声明Integer
会得到与int
相同的结果,我也可以将所有声明更改为Integer
。
感谢您的时间。
答案 0 :(得分:3)
int
是原始类型,不是可以为空的值(它不能为空)。 Integer
是一个类对象,如果尚未实例化,则该对象可以为null。使用Integer
与int
赢得了真正影响功能的任何内容,如果您更改了" int"您的代码将会表现相同到"整数"无处不在。
答案 1 :(得分:3)
int a,b,c;
if (a == null) {
//code here
}
此代码没有意义,因为原始int
类型不能为空。即使你考虑过自动装箱,int a
也可以保证在装箱之前有一个值。
Integer a,b,c;
if (a == null) {
//code here
}
此代码有意义,因为对象Integer
类型可以为null(无值)。
就功能而言,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
}