Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
来源:互联网 发布:画工程图用什么软件 编辑:程序博客网 时间:2024/06/12 19:20
理解Java中Integer和int的Autoboxing,有助于java新手理解java内存机制。
在Java中的,Integer和int是可以Autoboxing和boxing的,这里要注意的是:在 int自动装箱成Integer的过程中,如果数值是在-128~127之间的值的话,那么会在在内存中供重用,用语句说明如下:
<pre name="code" class="java">//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
<span style="color: rgb(34, 34, 34); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; line-height: 22.1px;">valueOf会将常用的值(-128 to 127)cache起来。当i值在这个范围时,会比用构造方法Integer(int)效率和空间上更好。Long也是</span>
当然,看这段代码的时候,要明白“==”的用法。
另外要注意的一点的是,在不涉及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
- Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
- Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
- Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
- java 对数值的处理
- Java对特殊编码方式的处理
- Java的autoboxing
- Java 中的Integer Pool 和 autoboxing-same-value-to-different-objects问题
- [Java 数值] 数值类型之间的转换
- Java内置类型的Autoboxing实现机制和Integer的CacheInteger的使用
- Integer 数值范围在-128~127之间时分别使用 ==和 equals进行比较
- 对Java中的 int AND Integer的理解
- OCJP之Integer autoboxing
- java中的autoboxing和auto-unboxing
- java 对字符串中的数值排序
- JAVA-数值计算中的特殊情况,NAN,Infinity
- Java对特殊日期格式进行处理
- Java中数值类型之间的转换
- java-数值类型之间的转换
- Linux 用 shell 脚本 批量 导入 csv 文件 到 mysql 数据库
- Android开发之APP弹幕功能
- 【动态规划】Vijos P1493 传纸条(NOIP2008提高组第三题)
- 5. Web 的结构组件
- jQuery制作分页插件
- Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
- 关于HashSet是如何存取不重复的数据的理解
- 知识库
- 面试经历
- 深入分析AQS的Condition
- php静态属性和静态方法
- struts2自定义拦截器并配置拦截器使其生效
- 抽象类
- Unity UGUI学习(一)