Keep Moving

一个人倘若需要从思想中得到快乐,那么他的第一个欲望就是学习。
随笔 - 16, 文章 - 10, 评论 - 1, 引用 - 0
数据加载中……

Java Integer


public class Test {
    
public static void main(String[] args) {
        Integer i1 
= 100;
        Integer i2 
= 100;
        
if (i1 == i2) {
            System.out.println(
"i1==i2");
        } 
else {
            System.out.println(
"i1!=i2");
        }

        Integer i3 
= 200;
        Integer i4 
= 200;
        
if (i3 == i4) {
            System.out.println(
"i3==i4");
        } 
else {
            System.out.println(
"i3!=i4");
        }
    }
}

/**
*  i1==i2;
*  i3!=i4;
*/

 

java “==”就是比较引用,没有重载过,而由于-128至127内的Interger都是同一个对象引用,

所以第一个比较式true 之外的Interger 则不是同一个对象,所以比较为false
重载的应该是equals()方法,所以如果用equals来比较应该都为true.

在JDK源码中Integer类有一个内部类IntegerCache,它默认创建了一个-128~127的Integer对象数组。
只要比较的是在这256个数内,就直接在对象池里查找并返回该对象。
这是Java处于性能的考虑,目的是节省内存。
至于范围之外的,不同的引用就不相等了。 

 

 

 

 

 

posted on 2009-05-24 13:50 BruceLeey 阅读(130) 评论(0)  编辑  收藏 所属分类: JVM


只有注册用户登录后才能发表评论。


网站导航: