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()返回不同的结果。




原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266371.html