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