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
        }
 


本文转自 nileader 51CTO博客,原文链接:http://blog.51cto.com/nileader/309086,如需转载请自行联系原作者
相关文章
C4.
|
5月前
|
缓存 Java
Java的Integer对象
Java的Integer对象
C4.
35 0
|
2月前
|
Java
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
这篇文章解释了Java中`int`基本数据类型和其包装类`Integer`之间的区别,并指出在进行`==`运算时,`Integer`会拆箱为`int`类型,然后比较它们的值是否相等。
【Java基础面试十一】、int和Integer有什么区别,二者在做==运算时会得到什么结果?
|
2月前
|
Java
【Java基础面试十】、何对Integer和Double类型判断相等?
这篇文章讨论了如何在Java中正确比较`Integer`和`Double`类型的值,指出不能直接使用`==`操作符比较不同类型,而应该将它们转换为相同的基本数据类型(如`double`)后进行比较。
【Java基础面试十】、何对Integer和Double类型判断相等?
|
4月前
|
Java
Java中Integer类的应用
Java中Integer类的应用
|
3月前
|
Java
java lab8--------7-2 sdut-JAVA-Insert Integer element into array lists
java lab8--------7-2 sdut-JAVA-Insert Integer element into array lists
20 0
|
3月前
|
Java
Java中Integer类的应用
Java中Integer类的应用
|
5月前
|
缓存 安全 Java
Java的Integer和int有什么区别?
Java的Integer和int有什么区别?
45 1
|
5月前
|
Java
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
Java中int[]与Integer[]相互转化的方法,java基础知识面试重点总结
|
5月前
|
Java
Java 中表示整数的包装类Integer(详解)
Java 中表示整数的包装类Integer(详解)
|
5月前
|
Java 数据库
Java中BigDecimal比较大小的方法BigDecimal转换为Integer
Java中BigDecimal比较大小的方法BigDecimal转换为Integer
45 0
下一篇
无影云桌面