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

来源:互联网 发布:如何开展网络推广工作 编辑:程序博客网 时间:2024/06/14 08:31

理解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; }









0 0