本文中例子来自: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());
}
}
以上的坏习惯我也要尽快改了,希望大家一起学习一起进步,有什么更好的学习方法或技巧欢迎留言!