Earyant的技术博客

欢迎来到Earyant的技术博客,在这里我将与你分享新技术。

基本类型和包装类型差别

基本类型以及包装类型

java中定义了基本类型:

    * 整形: byte、short、int、long
    * 浮点型:float、double
    * 逻辑型: boolean
    * 字符型: char

以及对应的包装类型:

    * 整形: Byte、Short、Integer、Long
    * 浮点型: Float、Double
    * 逻辑型: Boolean
    * 字符型: Char 

自动装箱、拆箱

java为满足程序员基本类型和包装类型混合使用,按需自动装箱拆箱。
自动装箱拆箱使基本类型和包装类型之间的区别逐渐模糊,但是语义上有些许差别,性能上也有明显差别。

基本类型和包装类型差别

  • 基本类型有默认值,例如int值默认为0 ,而Integer没有默认引用,默认为null。
    所以在写数据库实体类或者网络请求接收字段的时候要使用包装类型,防止接受参数为null的情况。
  • 包装类的频繁更改并不是在原来的基础上更改,而是产生新的对象,所以包装类的频繁更改性能很差.

    使用Long情况

    1
    2
    3
    4
    5
    6
    7
    8
    long now = System.currentTimeMillis();
    Long sum = 0L;
    for (int i = 0; i < Integer.MAX_VALUE; i++) {
    sum += i;
    }
    System.out.println(sum);
    long end = System.currentTimeMillis();
    System.out.println("using Long total time = " + (end - now));

    耗费时间为

    1
    2
    2305843005992468481
    all time = 8832

    使用long情况

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private static void testlongAutoBoxing() {
    long now = System.currentTimeMillis();
    long sum = 0L;
    for (int i = 0; i < Integer.MAX_VALUE; i++) {
    sum += i;
    }
    System.out.println("using long ,sum =" + sum);
    long end = System.currentTimeMillis();
    System.out.println("using long total time = " + (end - now));
    }

    总耗费时间为

    1
    2
    2305843005992468481
    all time = 787

    在使用Long的时间比long增加10倍,原因是Long的操作过程中会构造大概2^31个实例。

欢迎关注我的其它发布渠道