Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)

 
  理解
Java中Integer和int的Autoboxing,有助于java新手理解java内存机制。
  在 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");
 
出的结果便是  i1 == i2   i3 != i4
当然,看这段代码的时候,要明白“==”的用法。

外要注意的一点的是,在不涉及Autoboxing的时候,Integer数值没有以上所述的特性如:还是以上的代码,只是在创建Integer对象的时候不同,
 
Integer i1 = new Integer(102);
                                Integer i2 = new Integer(102);
                                Integer i3 = new Integer(232);
                                Integer i4 = new Integer(232);
此时,输出的结果是    i1 != i2   i3 != i4

里再指明的一点是关于equals方法的,这个方法用在这里就可以避免Integer类的这种特殊处理,将以上代码中的if语句的改一下:
if(i1 == i2) 可以改成 if( i1.equals(i2) ) ,就可以了。
充的是:equals()的原型是:
public boolean equals(Object obj)
{
         return ( this == obj);
}
这个if(i1 == i2) 和 if( i1.equals(i2) )不是异曲同工了吗?
不是的,Integer中已经对这个方法作了重载:
 
public boolean equals(Object obj) {
         if (obj instanceof Integer) {
                 return value == ((Integer)obj).intValue();
        }
         return false;
        }
 

你可能感兴趣的:(java,职场,Integer,AutoBoxing,休闲)