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对象同理。
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对象同理。
相关文章推荐
- java基础之Integer和Long对象相等比较 .
- java基础之Integer和Long对象相等比较 .
- 1.00 【基础知识之基础类型】 JAVA中Long与Integer比较容易犯的错误
- java基本对象Integer,String比较相等及equal案例说明
- java Long、Integer 、Double、Boolean类型 不能直接比较
- 增加java基础——hashSet中存放对象的比较规则
- Java为什么两个值相等的对象==比较返回false而两个值相等的不同类型的的基本数据类型返回true
- Java基础之数据比较Integer、Short、int、short
- java比较自定义对象相等的方法
- 增强java基础 Java中对象之间比较大小
- Java常用类:Data()的用法,获得当前日期和时间对象date 定义对象Date date1 = new Date(36000000);获得包含的日期和时间 比较date和date1是否相等
- JAVA中Long与Integer比较容易犯的错误
- JAVA中Long与Integer比较容易犯的错误
- java常见面试题之Integer,String比较相等及equal案例
- 【Java】Integer变量相等(==)比较问题
- java基础----比较对象 hashcode 与 equals 与 ==
- java比较两个对象是否相等的方法
- Java中对象间类型是否相等的比较:instanceof的特点
- 第2章 Java编程基础——FAQ2.21 ==和equals()都可用于比较两个操作数是否相等, 它们有什么区别吗?