论坛首页 Java企业应用论坛

Java Effective 49 基本类型优于装箱基本类型

浏览 2209 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-01-31   最后修改:2011-01-31
1. 同一样比较,a,b 不相等!dentity comparision!
Integer a = new Integer(1);
Integer b=  new Integer(1);


2. 当装箱基本类型引用为null时,进行自动拆箱时,将抛出java.lang.NullPointerException异常。
        // java.lang.NullPointerException
        // if(42==i){
        // System.out.println("Yes");
        // }

3. 装箱,拆箱效率低!如!
 public static void main(String[] args) {
     
        {
            Date start = new Date();
            Long sum = 0l;
            for (long i = 0; i < Integer.MAX_VALUE; i++) {
                sum += i;
            }
            System.out.println(sum);
            Date end = new Date();
            System.out.println("box & unbox cost:  " + (end.getTime() - start.getTime()));
        }

        {
            Date start = new Date();
            long sum = 0l;
            for (long i = 0; i < Integer.MAX_VALUE; i++) {
                sum += i;
            }
            System.out.println(sum);
            Date end = new Date();
            System.out.println("NO box & unbox cost:  " + (end.getTime() - start.getTime()));
        }
    }


引用

输出:
box & unbox cost:     26233
NO box & unbox cost:  5874




合适场合:
1. Set中的Key, Value.因为不能将基本类型放入集合中!
   发表时间:2011-01-31  
用了包装类型当然只能用equals比较相等

acrbb 写道
3. 装箱,拆箱效率低!如!
 public static void main(String[] args) {
     
        {
            Date start = new Date();
            Long sum = 0l;
            for (long i = 0; i < Integer.MAX_VALUE; i++) {
                sum += i;
            }
            System.out.println(sum);
            Date end = new Date();
            System.out.println("box & unbox cost:  " + (end.getTime() - start.getTime()));
        }

        {
            Date start = new Date();
            long sum = 0l;
            for (long i = 0; i < Integer.MAX_VALUE; i++) {
                sum += i;
            }
            System.out.println(sum);
            Date end = new Date();
            System.out.println("NO box & unbox cost:  " + (end.getTime() - start.getTime()));
        }
    }


引用

输出:
box & unbox cost:     26233
NO box & unbox cost:  5874



楼主大大能把两个测试的顺序反过来再测一次吗,
 public static void main(String[] args) {
     
        {
            Date start = new Date();
            long sum = 0l;
            for (long i = 0; i < Integer.MAX_VALUE; i++) {
                sum += i;
            }
            System.out.println(sum);
            Date end = new Date();
            System.out.println("box & unbox cost:  " + (end.getTime() - start.getTime()));
        }

        {
            Date start = new Date();
            Long sum = 0l;
            for (long i = 0; i < Integer.MAX_VALUE; i++) {
                sum += i;
            }
            System.out.println(sum);
            Date end = new Date();
            System.out.println("NO box & unbox cost:  " + (end.getTime() - start.getTime()));
        }
    }
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics