Java常用基础类库
- java.lang.Math
- java.math.BigDecimal
- java.math.MathContext
- java.lang.String
- java.lang.StringBuffer
- java.lang.StringBuilder
- java.lang.Thread
- java.lang.ThreadLocal
- java.lang.Class
- java.lang.ClassLoader
- java.util.Local
- java.util.ResourceBundle
- java.text.MessageFormat
- java.util.Date
- java.util.Calendar
- java.text.DateFormat
- java.text.SimpleDateFormat
- java.util.Arrays
- java.util.regex.Pattern
- java.util.logging
- com.alibaba.fastjson
- javax.xml
- org.mockito.Mockito
- java.util.regex.Pattern
- java.sql.Connection
- java.sql.Driver
- java.sql.DriverManager
- java.sql.ResultSet
- java.sql.ResultSetMetaData
- java.sql.Statement
- java.util.Collection
- java.util.Collections
- java.util.List
- java.util.Map
java.lang.Math
java.math.BigDecimal
java.math.MathContext
1.java.lang.Math通过静态方法提供基本数字运算
2.如果需要精确结果,建议主要使用int以及long类型以及BigDecimal,少使用或不使用float和double,float和double类型主要是为了科学计算和工程计算而设计的,它们执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而设计的,这两种类型不会提供精确的结果,尤其不适用于货币计算
double i = 1.03;
double j = 0.42;
// 输出:0.6100000000000001
System.out.println(i - j);
BigDecimal Bi = new BigDecimal("1.03");
BigDecimal Bj = new BigDecimal("0.42");
// 两个数相减
BigDecimal result = Bi.subtract(Bj);
// 输出0.61
System.out.println(result);
3.java.math.BigDecimal将每个数字都转换成
u
n
s
c
a
l
e
d
V
a
l
u
e
×
1
0
−
s
c
a
l
e
unscaledValue × 10^{-scale}
unscaledValue×10−scale
如:1.03表示成
103
×
1
0
−
2
103×10^{-2}
103×10−2
使用BigDecimal计算后的四舍五入可以使用java.math.MathContext默认的方案(java.math.RoundingMode.HALF_UP ,舍入模式:向“最近的邻居”舍入,除非两个邻居都是等距的,在这种情况下,向上取整。)或传入自己定制的MathContext
MathContext(int setPrecision, RoundingMode setRoundingMode)
其中Precision是指指定的精度,即保留多少位数;
RoundingMode指舍入模式,由java.math.RoundingMode指定
BigDecimal Bi = new BigDecimal("11.03");
BigDecimal Bj = new BigDecimal("0.42");
// 使用默认的舍入方式,两个数相减
BigDecimal result = Bi.subtract(Bj);
// 输出10.61
System.out.println(result);
// 定制一个舍入模式,结果保留两位,使用UP模式,即只要小数点后的部分大于零,就进位
MathContext mc = new MathContext(2, RoundingMode.UP);
result = Bi.subtract(Bj, mc);
// 输出11
System.out.println(result);
java.lang.String
java.lang.StringBuffer
java.lang.StringBuilder
1.三者的区别
(1)字符串String是常量,它们的值创建后无法更改,因此字符串的拼接会通过复制产生多个String对象;
(2)StringBuffer是线程安全的可变字符序列;
(3)StringBuilder是可变的字符序列,但是不保证同步,因此在处理速度上比StringBuffer快