理解Java中Integer和int的Autoboxing有助于java新手理解java内存机制
在Java中的Integer和int是可以Autoboxing和boxing的这里要注意的是
在 int自动装箱成Integer的过程中如果数值是在~之间的值的话那么会在在内存中供重用用语句说明如下
//i and i is in the range of ~ while i and i not
Integer i = ;
Integer i = ;
Integer i = ;
Integer i = ;
//compare the i whit i
if(i == i) Systemoutprint(i == i);
else Systemoutprintln(i != i);
//compare the i whit i
if(i == i) Systemoutprint(i == i);
else Systemoutprintln(i != i);
输 出的结果便是 i == i i != i
当然看这段代码的时候要明白==的用法
另 外要注意的一点的是在不涉及Autoboxing的时候Integer数值没有以上所述的特性如还是以上的代码只是在创建Integer对象的时候不同
Integer i = new Integer();
Integer i = new Integer();
Integer i = new Integer();
Integer i = new Integer();
此时输出的结果是 i != i i != i
这 里再指明的一点是关于equals方法的这个方法用在这里就可以避免Integer类的这种特殊处理将以上代码中的if语句的改一下
if(i == i) 可以改成 if( iequals(i) ) 就可以了
补 充的是equals()的原型是
public boolean equals(Object obj)
{
return (this == obj);
}
那 这个if(i == i) 和 if( iequals(i) )不是异曲同工了吗?
不是的Integer中已经对这个方法作了重载
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj)intValue();
}
return false;
}