效率问题

一个简单的测试题: 计算所有int正直的总和。

分析:要想求所有的int类型正值的和,最终的结果用什么进行接受呢?
毫无疑问int肯定是不够大的,可以考虑用long进行接收。一个简单的demo如下:

 public static void main(String [] args){
        long a = new Date().getTime();
        System.out.println(a);
        Long sum = 0L;
        for (long i = 0; Integer.MAX_VALUE > i; i++){
            sum += i;
        }
        System.out.println(sum);
        long b = new Date().getTime();
        System.out.println(b);

        System.out.println((b-a)/1000);
    }

该测试的结果为:

1509961528957
2305843005992468481
1509961536944
7

根据上面的结果可以看出来,和为2305843005992468481,用时大约是7秒。聪明的人会发现,这样效率低了很多,一个字母带来的危害真的是很大的。经过修改后的代码如下:

public static void main(String [] args){
        long a = new Date().getTime();
        System.out.println(a);
        long sum = 0L;
        for (long i = 0; Integer.MAX_VALUE > i; i++){
            sum += i;
        }
        System.out.println(sum);
        long b = new Date().getTime();
        System.out.println(b);

        System.out.println((b-a)/1000);
    }

这样的执行结果为:

1509961736241
2305843005992468481
1509961737967
1

可以看出效率明显提高了不少,大约提高了7倍,变量sum被声明为Long而不是long,意味着程序构造了大约2的31 次方个多余的Long实例(大约每次往Long sum中增加long时构造一个实例)。
结论很明显:优先使用基本数据类型而不是装箱基本类型,要当心无意识的自动装箱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值