JAVA编程规范

1 接口类中的方法和变量都不要加任何的修饰符号,public也不要加。因为经过编译的class文件会自动加上这些

public interface CalInterface {
 
    float PI = 3.14159f;//定义用于表示圆周率的常量PI
 
    float getArea(float r);//定义一个用于计算面积的方法getArea()
 
    float getCircumference(float r);//定义一个用于计算周长的方法getCircumference()
}
public abstract interface CalInterface
{
  public static final float PI = 3.14159F;
 
  public abstract float getArea(float paramFloat);
 
  public abstract float getCircumference(float paramFloat);
}

2 Float型,DOUBLE型计算问题

  如果涉及到小数运算,对于float和double型,不能够使用‘+’,'-' '=='等运算。必须转成BigDecimal

  

BigDecimal a = new BigDecimal("1.0");
BigDecimal b = new BigDecimal("0.9");
BigDecimal c = new BigDecimal("0.8");
BigDecimal x = a.subtract(b);
BigDecimal y = b.subtract(c);
if (x.compareTo(y) == 0) {
System.out.println("true");
}
 
如上所示 BigDecimal 的等值比较应使用 compareTo()方法,而不是 equals()方法。
说明:equals()方法会比较值和精度(1.0 与 1.00 返回结果为 false),而 compareTo()则会忽略精度。
 
禁止使用构造方法 BigDecimal(double)的方式把 double 值转化为 BigDecimal 对象。
说明:BigDecimal(double)存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
如:BigDecimal g = new BigDecimal(0.1F); 实际的存储值为:0.10000000149
正例:优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了
Double 的 toString,而 Double 的toString 按 double 的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1"); BigDecimal recommend2 = BigDecimal.valueOf(0.1);
 
3 集合变成数组
List<String> list = new ArrayList<>(2);
list.add("guan");
list.add("bao");
String[] array = list.toArray(new String[0]);
注意,toArray方法入参必须是长度是0,通过自适应创建性能是最好的
4 数组变集合
String[] str = new String[] { "chen", "yang", "hao" };
List list = Arrays.asList(str);
注意,返回的List是
private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {

该ArrayList是Arrays的内部类,它不支持add,remove,clearall等方法

 

posted on 2021-07-05 20:31  MaXianZhe  阅读(50)  评论(0编辑  收藏  举报

导航