标签:指针 实例 math 构造参数 ring ltm turn 情况下 collect
1 String.split(String regex), 传入的参数是正则表达式,有一些特殊字符(比如.[]()\| 等)需要转义。
2 关于枚举类型,一般用作常量,理想情况下,枚举中的属性字段是私有的,并在私有构造函数中赋值,没有对应的 Setter 方法,最好加上 final 修饰符。
public enum PersonSex2 {
MALE("", "man"),
FEMALE("", "female");
// value/description用final,因为一般枚举类型被用作常量,不可以修改
private final String value; // value可以是其他类型,一般用int
private final String description; // description 一般用String。
// 构造函数用private,是因为不想在外部被实例化。
private PersonSex2(String value, String description) {
this.value = value;
this.description = description;
}
// 只有get方法,没有set方法,是因为不会setter。
public String getValue() {
return value;
}
public String getDescription() {
return description;
}
}
3 返回空数组和空集合而不是 null
返回 null ,需要调用方强制检测 null ,否则就会抛出空指针异常。返回空数组或空集合,有效地避免了调用方因为未检测 null 而抛出空指针异常,还可以删除调用方检测 null 的语句使代码更简洁。
public static List<String> getResults() { return new ArrayList<>(0); } public static List<String> getResultList() { return Collections.emptyList(); } public static Map<String, String> getResultMap() { return Collections.emptyMap(); }
4 禁止使用构造方法 BigDecimal(double)
浮点数进行计算,有精度损失,不准确,如下(Java中float的精度为6-7位有效数字。double的精度为15-16位):
System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42); System.out.println(4.015 * 100); System.out.println(123.3 / 100); 0.060000000000000005 0.5800000000000001 401.49999999999994 1.2329999999999999
BigDecimal b = new BigDecimal(1.02); BigDecimal c = new BigDecimal("1.01"); BigDecimal d = new BigDecimal("1.02");
System.out.println(a.add(b)); // a和b是用float构造的,也有精度损失
System.out.println(c.add(d)); // c和d是用String 类型构造的,没有精度损失 2.0300000000000000266453525910037569701671600341796875 2.03
/** * @author: Ji YongGuang. * @date: 19:50 2017/12/14. */ public class BigDecimalUtil { private BigDecimalUtil() { } public static BigDecimal add(double v1, double v2) {// v1 + v2 BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2); } public static BigDecimal sub(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.subtract(b2); } public static BigDecimal mul(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.multiply(b2); } public static BigDecimal div(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); // 2 = 保留小数点后两位 ROUND_HALF_UP = 四舍五入 return b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP);// 应对除不尽的情况 } }
标签:指针 实例 math 构造参数 ring ltm turn 情况下 collect
原文地址:https://www.cnblogs.com/liufei1983/p/11782304.html