api:java已经写好的常用功能的类
Math
System:
arraycopy:参数:
Runtime:
Object:
toString:
equals:
clone:
浅拷贝:直接把原来变量记录的值(地址值)直接拷贝。改变一个值,另一个值也会随之改变。
深拷贝:如果是基本数据类型,会把变量记录的值直接拷贝过来。但是如果是引用数据类型,它不直接拷贝地址值,会在外面重新在创建一个对象,把原来的数据全都拷贝到新对象上。
不过引用数据类型如果不是手动new出来的,会在串池当中进行管理,字符串会复用。
Object里的克隆是浅克隆
第三方工具深克隆:
第三方工具:Gson
1.把第三方写的代码导入项目中
2.编写代码
Gson gson = new Gson();
//把对象变成一个字符串
Stirng s = gson.toJson(u1);
//再把字符串变回对象就可以
User user = gson.fromJson(s,User.class);
Object 成员方法:
public static boolean equals(Object a, Object b) 先做非空判断,比较两个对象
public static boolean isNull(Object ojb ) 判断对象是否为null,为null返回true,反之flase
public static boolean nonNull(Object obj) 判断对象是否为null,跟isNull结果相反
/* * public BigInteger(int num,Random rd) 随机获取一个大整数,范围:[0,2 的 num 次方 -1] * public BigInteger(String val) 获取指定大整数 * public BigInteger(String val,int radix) 获取指定进制的大整数 * * public static BigInteger valueOf(long val) 静态方法获取BigInteger对象,内部有优化 * * 细节: * 对象一旦创建里面的数据不能发生改变 * */
public static void main(String[] args) {
/*
* public BigInteger(int num,Random rd) 随机获取一个大整数,范围:[0,2 的 num 次方 -1]
* public BigInteger(String val) 获取指定大整数
* public BigInteger(String val,int radix) 获取指定进制的大整数
*
* public static BigInteger valueOf(long val) 静态方法获取BigInteger对象,内部有优化
*
* 细节:
* 对象一旦创建里面的数据不能发生改变
* */
//1.随机获取一个大整数,范围:[0,2 的 num 次方 -1]
Random rd = new Random();
BigInteger bi1 = new BigInteger(10, rd);
System.out.println(bi1);
//2.获取指定大整数
BigInteger bi2 = new BigInteger("8888888888888999999999998");
System.out.println(bi2);
//3.获取指定进制的大整数
//字符串中的数字必须是整数,必须要跟进制吻合
BigInteger bi3 = new BigInteger("101010101111001111", 2);
System.out.println(bi3);
//4.静态方法获取BigInteger对象,内部有优化
//细节:
//1.能表示的范围比较小,在long的取值范围之内,如果超出long的范围就不行了
//2.在内部对常用的数字:-16 ~ 16进行了优化
//提前把-16~16先创建好BigInteger的对象,如果多次获取,不会创建新的
// BigInteger bi5 = BigInteger.valueOf(16);
// BigInteger bi6 = BigInteger.valueOf(16);
// System.out.println(bi5==bi6); //true
//
// BigInteger bi7 = BigInteger.valueOf(17);
// BigInteger bi8 = BigInteger.valueOf(17);
// System.out.println(bi7==bi8); //false
//5.对象一旦创建内部的数据不能发生改变
BigInteger bi9 = BigInteger.valueOf(1);
BigInteger bi10 = BigInteger.valueOf(2);
BigInteger result = bi9.add(bi10);
System.out.println(result);
//此时,他不会修改参与计算的BigInteger对象中的值,而是产生了一个新的BigInteger对象,用来记录3
System.out.println(bi9 == result); //false
System.out.println(bi10 == result); //false
}
public static void main(String[] args) {
/*
* public BigInteger add(BigInteger val) 加法
* public BigInteger subtract(BigInteger val) 减法
* public BigInteger multiply(BigInteger val) 乘法
* public BigInteger divide(BigInteger val) 除法,获取商
* public BigInteger[] divideAndReminder(BigInteger val) 除法 获取商和余数
* public boolean equals(Object x) 比较是否相同
* public BigInteger pow(int exponent) 次幂
* public BigInteger max/min(BigInteger val) 返回较大值/较小值
* public int intValue(BigInteger val) 转为int类型整数,超出范围数据有误
* */
//1.先创建两个BigInteger对象
BigInteger bi1= BigInteger.valueOf(10);
BigInteger bi2= BigInteger.valueOf(2);
//2.public BigInteger add(BigInteger val) 加法
BigInteger bi3 = bi1.add(bi2);
System.out.println(bi3);
System.out.println("-----------------------");
//3.public BigInteger subtract(BigInteger val) 减法
BigInteger bi4 = bi1.subtract(bi2);
System.out.println(bi4);
System.out.println("-----------------------");
//4.public BigInteger multiply(BigInteger val) 乘法
BigInteger bi5 = bi1.multiply(bi2);
System.out.println(bi5);
System.out.println("-----------------------");
//5.public BigInteger divide(BigInteger val) 除法,获取商
BigInteger bi6 = bi1.divide(bi2);
System.out.println(bi6);
System.out.println("-----------------------");
//6.public BigInteger[] divideAndReminder(BigInteger val) 除法 获取商和余数
BigInteger[] bi7 = bi1.divideAndRemainder(bi2);
System.out.println(bi7[0]);
System.out.println(bi7[1]);
System.out.println("-----------------------");
//7.public boolean equals(Object x) 比较是否相同
boolean b = bi1.equals(bi2);
System.out.println(b);
System.out.println("-----------------------");
//8.public BigInteger pow(int exponent) 次幂
BigInteger bi8 = bi1.pow(4);
System.out.println(bi8);
System.out.println("-----------------------");
//public BigInteger max/min(BigInteger val) 返回较大值/较小值
BigInteger bi9 = bi1.max(bi2);
System.out.println(bi9);
System.out.println("-----------------------");
// public int intValue(BigInteger val) 转为int类型整数,超出范围数据有误
int i = bi1.intValue();
System.out.println(i);
double v = bi1.doubleValue();
System.out.println(v);
}
BigDecimal:
public static void main(String[] args) {
/*
* 构造方法获取BIgDecimal对象
* public BigDecimal(double val)
* public BigDecimal(String val)
*
* 静态方法获取BigDecimal对象
* public static BigDecimal valueOf(double val)
*
* */
//1.通过传递double类型的小数来创建对象
//细节:
//这种方式有可能是不精确的,所以不建议使用
BigDecimal bd1= new BigDecimal(0.01);
BigDecimal bd2= new BigDecimal(0.09);
System.out.println(bd1);
System.out.println(bd2);
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3);
//通过传递字符串表示的小数来创建对象
BigDecimal bd4= new BigDecimal("0.01");
BigDecimal bd5= new BigDecimal("0.09");
System.out.println(bd4);
System.out.println(bd5);
BigDecimal bd6 = bd4.add(bd5);
System.out.println(bd6);
//3.通过静态方法获取对象
BigDecimal bd7 = BigDecimal.valueOf(10.0);//10.0
BigDecimal bd8 = BigDecimal.valueOf(10.0);
System.out.println(bd7==bd8);
//细节:
//1.如果要表示的数字不大,没有超出double的范围,建议使用静态方法
//2.如果要表示的数字比较大,超出了double范围,建议使用构造方法
//如果我们传递的是0~10之间的整数,包含0和10,那么方法会返回已经创建好的对象,不会重新new
}
BIgDecimal RoundingMode
枚举:
UP:远离0的方向舍入的舍入模式,正数向上,负数向下
DOWN:向0方向舍入的舍入模式,正数向下,负数向上,与UP相反
CEILING:向正无限大方向舍入的舍入模式,数轴正方向
FLOOR:向负无限大方向舍入的舍入模型,数轴负方向
HALF_ UP:四舍五入。
HALF_DOWN:向最接近数字方向舍入的舍入模式,如果与两个相邻数字距离相等,则向下舍入