有关于优化封装Stystem.out.println来测试

本文中例子来自:http://www.codeceo.com/article/10-good-java-programmer-tips.html

我们在做项目或者小测试时经常会用到Stystem.out.println();来测试,但是这样的办法往往会遇到意想不到的问题,我自己也是经常会这么干,从今以后改了。

可以看下下面的例子:

public class BadCode {  
    public static void calculationWithPrint(){  
        double someValue = 0D;  
        for (int i = 0; i < 10000; i++) {  
            System.out.println(someValue = someValue + i);  
        }      
    }  
    public static void calculationWithOutPrint(){  

            double someValue = 0D;  
            for (int i = 0; i < 10000; i++) {  
                someValue = someValue + i;  
            }  

    }  
    public static void main(String [] n) {  
        BadCode.calculationWithPrint();  
        BadCode.calculationWithOutPrint();  
    }  
}

calculationWithOutPrint()  方法执行时间是0.001204 s. 作为对比,calculationWithPrint() 方法居然需要令人难以置信的10.52 s来执行!

这个在测试时候我们是根本想不到的结果,我们总是抱着我测试完我就把Stystem.out.print删了的心态。我们最好的办法就是利用JAVA可封装的特性 将其封装,避免cpu的浪费。

public class BadCode {  

        public static final int DEBUG_MODE = 1;  
        public static final int PRODUCTION_MODE = 2;  

    public static void calculationWithPrint(int logMode){      
        double someValue = 0D;  
        for (int i = 0; i < 10000; i++) {  
            someValue = someValue + i;  
            myPrintMethod(logMode, someValue);  
        }  
    }  

    public static void myPrintMethod(int logMode, double value) {  
        if (logMode > BadCode.DEBUG_MODE) {    return; }  
        System.out.println(value);      
    }  
    public static void main(String [] n) {  
        BadCode.calculationWithPrint(BadCode.PRODUCTION_MODE);  
        }  
}
另外StringBuffer比String更加能减少cpu的浪费:

public static void concatenateStrings(String startingString) {  
        for (int i = 0; i < 20; i++) {  
            startingString = startingString + startingString;  
        }  
    }  

    public static void concatenateStringsUsingStringBuffer(  
String startingString) {  
        StringBuffer sb = new StringBuffer();  
        sb.append(startingString);  
            for (int i = 0; i < 20; i++) {  
                sb.append(sb.toString());  
            }  
}
以上的坏习惯我也要尽快改了,希望大家一起学习一起进步,有什么更好的学习方法或技巧欢迎留言!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值