• java基础


    BigDecimal

    一般的float型和Double型数据只可 以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定 点数,可以用它来精确计算货币值。

    package test.java;

    import java.math.BigDecimal;

    public class TestBigDecimal {

         public static void main(String args[]) {
                // 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);
                // System.out.println(add(1.11, 2.34));  //加法
    //         System.out.println(sub(1.11, 2.34)); //减法
    //         System.out.println( mul(1.11, 2.34)); //乘法
    //         System.out.println( div(1.11, 2.34)); //乘法
               System. out.println( round(Math.PI, 3));      //乘法
         }

         // 默认除法运算精度
         private static final int DEF_DIV_SCALE = 10;

         // 提供精确的加法运算。
         public static double add(double v1, double v2) {
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.add(b2).doubleValue();
         }

         // 提供精确的减法运算。
         public static double sub(double v1, double v2) {
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.subtract(b2).doubleValue();
         }

         // 提供精确的乘法运算。
         public static double mul(double v1, double v2) {
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.multiply(b2).doubleValue();
         }

         // 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到小数点以后10位,以后的数字四舍五入。
         public static double div(double v1, double v2) {
                return div(v1, v2, DEF_DIV_SCALE);
         }

         // 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指精度,以后的数字四舍五入。
         public static double div(double v1, double v2, int scale) {
                if (scale < 0) {
                     throw new IllegalArgumentException(
                                "The   scale   must   be   a   positive   integer   or   zero");
               }
               BigDecimal b1 = new BigDecimal(Double. toString(v1));
               BigDecimal b2 = new BigDecimal(Double. toString(v2));
                return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
         }

         // 提供精确的小数位四舍五入处理。
         public static double round(double v, int scale) {
                if (scale < 0) {
                     throw new IllegalArgumentException(
                                "The   scale   must   be   a   positive   integer   or   zero");
               }
               BigDecimal b = new BigDecimal(Double. toString(v));
               BigDecimal one = new BigDecimal( "1");
                return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
         }

    }

    Object类的clone()方法

    clone()
              创建并返回此对象的一个副本。


    泛型:

         1、泛型是java的一种类型
         2、泛型是ParameterizedType
              *泛型的组成:
                   Class(类或接口)<T,E,F>
                        Class(类或接口) rawType               Type
                        T,E,F               actualTypeArguments Type[]
                   参数的传递方法
                        1、在创建对象的时候可以把参数传递进去
                             ArrayList<Department> dList = new ArrayList<Department>();
                        2、public interface A<T>
                           public class B<T> implements B<E>
                           public class D extends B<E>
                           向上看
                   得到泛型类
                   Class c.getGenericSuperclass();
         举例:public class DepartmentDaoImpl extends BaseDaoImpl<Department >
                   class BaseDaoImpl< T> implements BaseDao< T>
                   this .getClass().getGenericSuperclass();
                   this:BaseDaoImpl  getGenericSuperclass得到泛型的父类即T的父类(传入泛型的值)


    ConcurrentHashMap和Hashtable的区别

    Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map。


    ==与equals方法的区别

    ==与equals的主要区别是:==常用于比较原生类型,而equals()方法用于检查对象的相等性。另一个不同的点是:如果==和equals()用于比较对象,当两个引用地址相同,==返回true。而equals()可以返回true或者false主要取决于重写实现。最常见的一个例子,字符串的比较,不同情况==和equals()返回不同的结果。




  • 相关阅读:
    elasticseacth基础操作--QueryBuilders的使用
    并发编程(八)并发安全
    redis集群 相关
    并发编程(七)线程池
    PMP--综合考试知识点,持续更新中。。。
    常用正则表达式
    测试计划
    ACC(Attribute Component Capability) 即特质,组件,能力
    LockScreen
    Custom Window
  • 原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266371.html
Copyright © 2020-2023  润新知