代码优化技巧
用String.format拼接字符串
System.out.println(String.format("拼接字符串:%s,%s,%s", "1", "2", "3"));
String s = "拼接字符串2:%s,%s";
System.out.println(String.format(s, "1", "2"));用于url或字符串拼接,不得用于for循环中使用,拼接效率低于StringBuilder和+拼接。
使用缓冲IO流
IO流对文件进行读写操作时使用替代BufferedInputStream和BufferedOutputStream替代FileInputStream和FileInputStream,定义一个buffer字节数组提升IO的性能。
减少循环次数
使用stream流和map等方法减少循环次数;
BigDecimal中Double转换
BigDecimal中对Double的转换如果使用new Bigdecimal(0.01)转换Double类型的数据,回导致数据精度丢失的情况
double a = 0.03;
double b = 0.02;
System.out.println(a - b);
//输出:0.009999999999999998
BigDecimal decimalA = new BigDecimal(a);
BigDecimal decimalB = new BigDecimal(b);
System.out.println(decimalA.subtract(decimalB));
//输出:0.0099999999999999984734433411404097569175064563751220703125原因是Bigdecimal的构造函数的结果可能不可预测;正确用法:
BigDecimal amount1 = new BigDecimal(Double.toString(0.02));
BigDecimal amount2 = new BigDecimal(Double.toString(0.03));
System.out.println(amount2.subtract(amount1));
//输出:0.01
BigDecimal amount1 = BigDecimal.valueOf(0.02);
BigDecimal amount2 = BigDecimal.valueOf(0.03);
System.out.println(amount2.subtract(amount1));Arrays.asList转换的集合不可修改
使用Arrays.asList方法转换后的ArrayList,是Arrays类的内部类,并非java.util包下我们常用的ArrayList。