代码优化技巧

用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流对文件进行读写操作时使用替代BufferedInputStreamBufferedOutputStream替代FileInputStreamFileInputStream,定义一个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