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.
|
1月前
|
缓存 Java
Java的Integer对象
Java的Integer对象
C4.
11 0
|
3月前
|
IDE Java 编译器
Java The method compareTo(Integer) in the type解决方法
Java编程过程中,Integer对象(或其它继承自Number类的包装类对象)使用Number包装类内置的compareTo()方法来比较调用对象和参数之间的大小的时候,Java的集成开发环境IDE或编译器给出了提示:The method compareTo(Integer) in the type Integer is not applicable for the arguments (Float)
33 5
|
4月前
|
Java
2048. 下一个更大的数值平衡数 --力扣 --JAVA
如果整数  x 满足:对于每个数位 d ,这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n ,请你返回 严格大于 n 的 最小数值平衡数 。 0 <= n <= 106
118 3
|
7月前
|
Java
Java判断Integer相等-应该这么这样用
Java判断Integer相等-应该这么这样用
|
1月前
|
Java
Java 中表示整数的包装类Integer(详解)
Java 中表示整数的包装类Integer(详解)
|
3月前
|
Java Go C++
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
36 0
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
|
3月前
|
存储 缓存 Java
深度解析Java中的Integer类原理及方法实现
深度解析Java中的Integer类原理及方法实现
61 0
|
8月前
|
Java
浅谈Java中的NAN与INFINITY:数值迷失与无限可能
浅谈Java中的NAN与INFINITY:数值迷失与无限可能
145 0
|
4月前
|
SQL 关系型数据库 MySQL
PostgreSQL【异常 01】java.io.IOException:Tried to send an out-of-range integer as a 2-byte value 分析+解决
PostgreSQL【异常 01】java.io.IOException:Tried to send an out-of-range integer as a 2-byte value 分析+解决
81 1
|
4月前
|
存储 缓存 Java
Java中的Integer缓存池
Java中的Integer缓存池
30 0