Java Integer详解

Integer

数据类型

1、内置数据类型(基本数据类型)

Java有如下的内置数据类型:

定义位数表示范围
bytebyte 数据类型是8位、有符号的,以二进制补码表示的整数8位-128至127
shortshort 数据类型是 16 位、有符号的以二进制补码表示的整数16位-215至215-1
intint 数据类型是32位、有符号的以二进制补码表示的整数32位-231至231-1
longlong 数据类型是 64 位、有符号的以二进制补码表示的整数64位-263至263-1
floatfloat 数据类型是单精度、32位、符合IEEE 754标准的浮点数,表示形式为3.2f32位1.4E-45至3.4028235E38
doubledouble 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;64位4.9E-324至1.7976931348623157E308
charchar 类型是一个单一的 16 位 Unicode 字符;16位0至65535

2、引用数据类型

引用数据类型分为数组、类、接口。

3、封装类类型

Java为每个基本数据类型提供了封装类,对应关系如下:

基本数据类型: booleancharbyteshortintlongfloatdouble
封装类类型:BooleanCharacterByteShortIntegerLongFloatDouble

4、int与Integer的基本使用对比

Integer是int的包装类;int是基本数据类型;

Integer变量必须实例化后才能使用;int变量不需要;

Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;

Integer的默认值是null;int的默认值是0。

5、int与Integer的详细对比

(1)因为Integer变量是对Integer对象的引用,所以通过new关键字生成的Integer变量是不相等的,如下:

package com.java.basic;

public class UseInteger {
    public static void main(String[] args) {
        Integer i = new Integer(100);
        //i内存地址为460141958
        System.out.println(System.identityHashCode(i));
        Integer j = new Integer(100);
        //j的内存地址为1163157884
        System.out.println(System.identityHashCode(j));
        System.out.print(i == j); //false
    }
}

(2)Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true,因为Integer会自动拆包为int,就相当于两个int相比较。

package com.java.basic;

public class UseInteger {
    public static void main(String[] args) {
        Integer i = new Integer(100);
        int j = 100;
        System.out.print(i == j); //true

    }
}

(3)非new生成的Integer变量且数据范围在-128-127之间,与new Integer()生成的对象比较时,如下:

package com.java.basic;

public class UseInteger {
    public static void main(String[] args) {
        Integer i = new Integer(100);
        //i内存地址为460141958
        System.out.println(System.identityHashCode(i));
        int a = 100;
        //a内存地址为1163157884
        System.out.println(System.identityHashCode(a));
        Integer j = 100;
        //j的内存地址为1163157884
        System.out.println(System.identityHashCode(j));
        System.out.print(i == j); //false

    }
}

因为在数据范围在-128-127之间时,非new生成的Integer生成的对象会指向常量池中的数据,所以与new Integer生成的对象内存地址不同,两者不相等。

(4)非new生成的Integer变量且数据范围为-128-127之外,与非new生成的Integer变量比较时,如下:

package com.java.basic;

public class UseInteger {
    public static void main(String[] args) {
        int a = 129;
        //a内存地址为460141958
        System.out.println(System.identityHashCode(a));
        Integer i = 129;
        //i内存地址为1163157884
        System.out.println(System.identityHashCode(i));
        Integer j = 129;
        //j的内存地址为1956725890
        System.out.println(System.identityHashCode(j));
        System.out.print(i == j); //false

    }
}

因为在-128-127范围之外的数据,不会被自动加入到常量池中,所以非new生成的Integer变量相当于new Integer(),内存地址不同故不相等。

7、参考链接

JAVA常量池,一篇文章就足够入门了。(https://blog.csdn.net/qq_41376740/article/details/80338158)

Java基础之int和Integer有什么区别https://blog.csdn.net/chenliguan/article/details/53888018)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值