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

来源:互联网 发布:端口135 139 编辑:程序博客网 时间:2024/05/29 17:52
 关于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对象同理。

原创粉丝点击