java Integer的比较实践(转自blogjava)
来源:互联网 发布:php财务系统源码 编辑:程序博客网 时间:2024/05/17 08:19
package com.test;
public class 解包装包 {
public static void main(String []args) {
Integer a = 100;
Integer b = 100;
System.out.println(a==b);
}
}
打印结果为:true
但是如果换成 128 > var >= -128 之外的整数就打false了。
这是什么原因呢?
1。java在编译的时候 Integer a = 100; 被翻译成-> Integer a = Integer.valueOf(100);
2。比较的时候仍然是对象的比较
3。在jdk源码中
。。。
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
。。。
而
。。。
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache = new Integer(i - 128);
}
}
。。。
这边是java为了提高效率,初始化了-128--127之间的整数对象
所以在赋值在这个范围内都是同一个对象。
再加一句
Integer a = 100;
a++;
//这边a++是新创建了一个对象,不是以前的对象。
public static void main(String []args) {
Integer a = 100;
Integer b = a;
a++;
System.out.println(a==b);
}
打印就是false
对于127--128没有多大关系,但是在这范围之外就影响性能了吧,就像StringBuffer VS String一样了
原文地址http://www.blogjava.net/zhaochengming/archive/2007/08/13/136468.html
这也就解释了下面代码的结果了
结果:
i1==i2
i3!=i4
参见
http://topic.csdn.net/u/20090523/14/443e23d0-6266-4e7d-b4c3-0fbc94aaa23b.html?seed=1562409845
JAVA这样做,
哦。。。是为了效率
才想起来,java “==”就是比较引用,没有重载过
而由于-128至127内的Interger都是同一个对象引用,所以第一个比较式true
之外的Interger 则不是同一个对象,所以比较为false
重载的应该是equals()方法,所以如果用equals来比较应该都为true
学到了
- java Integer的比较实践(转自blogjava)
- Lucene基本适用介绍(转自BlogJava的BlueDavy)
- Java正则表达式初学者指南(转自BLOGJAVA)
- poj里java的一些常用的语法(转自博客http://www.blogjava.net/DreamAngel/archive/2009/10/18/298731.html)
- resin4.0.23+nginx1.1集群 (转自 blogjava)
- 使用XStream注解实现Java对象与XML互相转换的代码示例---转自:http://www.blogjava.net/bolo
- java Integer比较的妙用
- java中Integer的比较
- java Integer的值比较
- 理解Java ClassLoader机制(转自http://www.blogjava.net/pandawang/archive/2007/10/05/64639.html)
- one-to-one的效率问题,用one-to-many来替代? (转自http://www.blogjava.net/ramon/)
- java的一些基础知识(引用BlogJava 落花飞雪)
- java的一些基础知识(引用BlogJava 落花飞雪)
- java的一些基础知识(引用BlogJava 落花飞雪)
- java中构造方法和方法全面解析(转自www.blogjava.net)
- Java RMI 入门指南 转自 http://www.blogjava.net/zhenyu33154/articles/320245.html
- Integer与int的种种比较你知道多少?——转自博客园
- (转自系统信息)Java中Integer类的方法
- 保护SQL2000安全的十个技巧
- SQL Server 2000的安全配置
- 使index.jsp直接转入action
- 彻底删除系统备份后产生的C_PAN.GHO文件
- DiretX的一些标记
- java Integer的比较实践(转自blogjava)
- 部署基于Windows2008防火墙策略提升域安全
- C语言格式输出
- 关于 const * 的问题
- 配置Windows Server 2008防火墙让系统更安全
- WIN2003命令行下配置IP地址
- NETSH命令
- 自定义实体类简介(4)
- VMware共享文件夹