理解
Java中Integer和int的Autoboxing,有助于java新手理解java内存机制。
在 Java中的,Integer和int是可以Autoboxing和boxing的,这里要注意的是:
在 int自动装箱成Integer的过程中,如果数值是在-128~127之间的值的话,那么会在在内存中供重用,用语句说明如下:
在 Java中的,Integer和int是可以Autoboxing和boxing的,这里要注意的是:
在 int自动装箱成Integer的过程中,如果数值是在-128~127之间的值的话,那么会在在内存中供重用,用语句说明如下:
//i1 and i2 is in the range of -128~127,
while i3 and i4 not.
Integer i1 = 102;
Integer i2 = 102;
Integer i3 = 232;
Integer i4 = 232;
//compare the i1 whit i2
if(i1 == i2) System.out.print( "i1 == i2");
else System.out.println( "i1 != i2");
//compare the i3 whit i4
if(i3 == i4) System.out.print( "i3 == i4");
else System.out.println( "i3 != i4");
Integer i1 = 102;
Integer i2 = 102;
Integer i3 = 232;
Integer i4 = 232;
//compare the i1 whit i2
if(i1 == i2) System.out.print( "i1 == i2");
else System.out.println( "i1 != i2");
//compare the i3 whit i4
if(i3 == i4) System.out.print( "i3 == i4");
else System.out.println( "i3 != i4");
输
出的结果便是 i1 == i2 i3 != i4
当然,看这段代码的时候,要明白“==”的用法。
另 外要注意的一点的是,在不涉及Autoboxing的时候,Integer数值没有以上所述的特性如:还是以上的代码,只是在创建Integer对象的时候不同,
当然,看这段代码的时候,要明白“==”的用法。
另 外要注意的一点的是,在不涉及Autoboxing的时候,Integer数值没有以上所述的特性如:还是以上的代码,只是在创建Integer对象的时候不同,
Integer i1 =
new Integer(102);
Integer i2 = new Integer(102);
Integer i3 = new Integer(232);
Integer i4 = new Integer(232);
Integer i2 = new Integer(102);
Integer i3 = new Integer(232);
Integer i4 = new Integer(232);
这 里再指明的一点是关于equals方法的,这个方法用在这里就可以避免Integer类的这种特殊处理,将以上代码中的if语句的改一下:
if(i1 == i2) 可以改成 if( i1.equals(i2) ) ,就可以了。
补
充的是:equals()的原型是:
public
boolean equals(Object obj)
{
return ( this == obj);
}
{
return ( this == obj);
}
不是的,Integer中已经对这个方法作了重载:
public
boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
本文转自 nileader 51CTO博客,原文链接:http://blog.51cto.com/nileader/309086,如需转载请自行联系原作者