Java int和Integer的区别

Java int和Integer的区别

public class IntAndInteger {

    public static void main(String[] args) {
        /*
         *  比较int 与 Integer 的区别
         * 1、Integer是int的包装类,int则是java的一种基本数据类型 
         * 2、Integer变量必须实例化后才能使用,而int变量不需要 
         * 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 
         * 4、Integer的默认值是null,int的默认值是0
         */
        int a = 100;
        int b = 100;
        Integer m = new Integer(100);
        Integer n = new Integer(100);
        /*
         * int 与 int 之间只是进行值的比较
         */
        if (a == b) {
            System.out.println("a = b");
        }else System.out.println("a != b"); // a = b

        /*
         * int 与 Integer 进行比较时:Integer会进行拆包java会自动拆包装为 int
         */
        if (a == m) {
            System.out.println("a = m");
        }else System.out.println("a != m"); // a = m 
        /*
         * 由于Integer变量实际上是对一个Integer对象的引用,
         * 所以两个通过new生成的Integer变量永远是不相等的
         * (因为new生成的是两个对象,其内存地址不同)。
         */
        if (m == n) {
            System.out.println("m = n");
        }else System.out.println("m != n"); // m != n

        /*
         * 非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。
         * (因为非new生成的Integer变量指向的是java常量池中的对象,
         * 而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)
         */
        Integer p = 100 ;
        if (m == p) {
            System.out.println("m = p");
        }else System.out.println("m != p"); // m != P

        Integer q = 100;
        Integer z = 128;
        /*
         * 对于两个非new生成的Integer对象,进行比较时,
         * 如果两个变量的值在区间-128到127之间,则比较结果为true,
         * 如果两个变量的值不在此区间,则比较结果为false
         */
        if (q == p) {
            System.out.println("q = p");
        }else System.out.println("q != p"); // q = P
        if (z == p) {
            System.out.println("z = p");
        }else System.out.println("z != p"); // z != P
        /*
        * java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下:
        *  public static Integer valueOf(int i){
        *       assert IntegerCache.high >= 127;
        *       if (i >= IntegerCache.low && i <= IntegerCache.high){
        *           return IntegerCache.cache[i + (-IntegerCache.low)];
        *       }
        *       return new Integer(i);
        *   }
        *java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,
         *下次再写Integer j = 127时,就会直接从缓存中取,就不会new了
         */
    }
}

猜你喜欢

转载自blog.csdn.net/long_zhiqi/article/details/80999620