您的位置:首页 > 编程语言 > Java开发

java基础之Integer和Long对象相等比较

2013-06-07 14:09 525 查看
关于Integer和Long对象在比较对象相同时很容易犯错,在本文将做一个简短的分析。看下面的代码

public static void main(String[] args) {

Integer a = new Integer(3);

Integer b = new Integer(3);

System.out.println(a==b);

Integer c = 129;

Integer d = 129;

System.out.println(c==d);

Integer e = 127;

Integer f = 127;

System.out.println(e==f);

Long h = 128L;

Long g = 128L;

System.out.println(h==g);

Long k = 127L;

Long m = 127L;

System.out.println(k==m);

}

输出结果:

false

false

true

false

true

////////////////////////////////////////////////////////////////////

a和b在堆中分别分配了两块内存区域所以二都不等很好理解,而c和d不等,然后e和f却相等呢?查看Integer源代码后发现Integer有个内部类IntegerCache,它维护了一个Integer数组cache[] ,长度为256,还有一个静态块

static {

for(int i = 0; i < cache.length; i++)

cache[i] = new Integer(i - 128);

}
很明显这个静态块已经默认认创建出了-128~127 的 Integer 数据,因此Integer在创建对象时,若值在(-128到127)范围内,则直接从缓冲区中取,若超过该范围则创建新对象,因此在-128到127范围内Integer对象值相同时,对象==返回true,Long对象同理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: