BigDecimal类
作用:解决浮点型运算精度失真的问题,如果需要进行小数运算,先将数据转换为BigDecimal类型,再调用方法运算
创建对象:直接使用BigDecimal的==valueOf(double val) :==方法,将需要运算的小数, 封装为BigDecimal对象
如:BigDecimal.valueOf(5.4)
常用方法:
doubleValue:将BigDecimal类型的数据转换为double类型
add:(BigDecimal augend, MathContext mc):加法,参数1为保留多少小数位 ,参数二为保留小数的方式,常用为四舍五入
RoundingMode.UP 进一法
RoundingMode.FLOOR 去尾法
RoundingMode.HALF_UP 四舍五入
subtract:减法
multiply(BigDecimal multiplicand, MathContext mc):乘法,参数2为小数舍入方式
divide:除法,RoundingMode.HALF_UP:代表小数四舍五入
包装类
自动装箱:基本类型的数据和变量直接赋值给包装类型的变量。
自动拆箱:包装类型的变量直接赋值给基本数据类型的变量。
特点:
- 包装类变量的默认值可以是null,容错率更高
- 可以把基本类型的数据转换成字符串类型(用处不大)
- 可以把字符串类型的数值转换成真实的数据类型(有用)
字符串转基本数据类型:
除了Character类之外,其他所有包装类都有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
如Integer.parseInt可以将字符串类型的整数转换为int类型
包装类面试题:
/*
使用层面: 包装类对象, 做比较, 使用equals可以比较内容
特点: 自动装箱的范围在 -128 ~ 127 之间, ==号比较就会返回为true
---------------------------------------------------------------------------------------
自动装箱的原理 :自动装箱, 系统会自动调用 Integer.valueOf() 方法, 来完成装箱
public static Integer valueOf(int i) {
if (i >= -128 && i <= 127) {
// IntegerCache.cache : 数组中存储 ---> -128 ~ 127 之间的每一个数字 ---> 256个数字
return IntegerCache.cache[i + 128]; // 255
} else {
// 如果装箱的数值, 不在范围当中, 就会重新new对象
return new Integer(i);
}
}
Integer类的源码中, 存在一份缓存, 这份缓存本质来说就是一个 Integer 类型的数组
数组中, 会存储着 -128 ~ 127 之间所有的 Integer 对象
在自动装箱的时候, 会调用 Integer.valueOf的方法, 方法内部会进行一次范围的判断
如果范围在 -128 ~ 127 之间, 就不会创建新的Integer对象, 而是从缓存中取出来了一份
反之, 不在范围中, 就会创建新的 Integer 对象
*/
public static void main(String[] args) {
Integer i1 = 127; // i1 : 从数组中取出的对象 ---> 255号索引
Integer i2 = 127; // i2 : 从数组中取出的对象 ---> 255号索引
System.out.println(i1 == i2); // true
System.out.println(i1.equals(i2)); // true
System.out.println("-----------------");
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i3 == i4); // false
System.out.println(i3.equals(i4)); // true
System.out.println("-----------------");
Long l1 = 127L;
Long l2 = 127L;
System.out.println(l1 == l2);//true
正则表达式
matches(String regex):判断是否匹配正则表达式,匹配返回true,不匹配返回false。
常用方法:
String replaceAll(String regex,String newStr):按照正则表达式匹配的内容进行替换
String[] split(String regex):按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。
String description = Pattern.compile("[\\d]").matcher(content).replaceAll("");
Arrays类:(类中方法通过类名调用)
作用:数组操作工具类,专门用于操作数组元素的。
static String toString(类型[] a):返回数组的内容(字符串形式)
static void sort(类型[] a):对数组默认升序排序
static int binarySearch(int[] a,int key):二分搜索数组中的数据,存在返回索引,不存在返回-1
static void sort(类型[] a, Comparator<?super T> c):使用比较器对象自定义排序
自定义排序规则:
如果认为左边数据 大于 右边数据 返回正整数
如果认为左边数据 小于 右边数据 返回负整数
如果认为左边数据 等于 右边数据 返回0
递归
含义:方法自己调用自己,如果递归程序找不到出口,会出现 StackOverflowError内存溢出异常
如:
public static void main(String[] args) {
sum();
}
public static void sum() {
sum();
}
//求5的累加和
jc(5);
public static int jc2(int num) {
if (num == 1) {
return 1;
} else {
return num += jc2(num - 1);
}
}