经过之前对于API的学习:JAVA基础 —— API
接下来的文章让我们来了解一下不同类下的方法,但是这些方法不要去背。
而是要去记一下类名和类作用,也可以在以后去查阅API帮助文档。
Math、System、Runtime和Object | JAVA基础 (常用API)—— Math、System、Runtime和Object |
BigInteger和BigDecimal | JAVa基础(常用API) —— BigInteger和BigDecimal |
正则表达式 | JAVA基础(常用API) —— 正则表达式 |
时间相关类 | JAVA基础(常用API) —— 时间相关类 |
包装类 | JAVA基础(常用API) —— 包装类 |
目录
一、BigInteger
在Java中,整数有四种类型:byte、short、int、long
在底层占用字节个数:byte1个字节、short2个字节、int4个字节、long8个字节。
1. BigInteger的构造方法
方法名 | 说明 |
public BigInteger(int num,Random rnd) | 获取随机大整数,范围[ 0 ~ 2的num次方-1] |
public BigInteger(String val) | 获取指定的大整数 |
public BigInteger(String val,int radix) | 获取指定进制的大整数 |
public static BigInteger valueOf(long val) | 静态方法获取BigInteger的对象,内部有优化 |
对象一旦创建,内部记录的值不能发生改变 |
import java.math.BigInteger;
import java.util.Random;
public class BigIntegerTest {
public static void main(String[] args) {
// 获取一个随机大整数
Random r = new Random();
for (int i = 0; i < 100; i++) {
BigInteger bd1 = new BigInteger(4, r);
System.out.println(bd1); // [0 ~ 15]
}
// 获取指定大整数
BigInteger bd2 = new BigInteger("100");
System.out.println(bd2); // 100
// 细节:字符串必须是整数,否则会报错
// BigInteger bd3 = new BigInteger("1.1"); //报错
// BigInteger bd4 = new BigInteger("abc"); //报错
// 获取指定进制的大整数
BigInteger bd3 = new BigInteger("100", 2); // 4
System.out.println(bd3);
// 细节:字符串必须是整数,且必须要跟进制吻合
// BigInteger bd4 = new BigInteger("123",2); //报错
//静态获取BigInteger对象,内部优化
//细节:1.能表示范围小,在long取值范围内,超出就不行
//2.在内部对常用数字:-16~16进行了优化
BigInteger bd5 = BigInteger.valueOf(16);
BigInteger bd6 = BigInteger.valueOf(16);
System.out.println(bd5.equals(bd6)); //true
BigInteger bd4 = BigInteger.valueOf(100);
System.out.println(bd4); //100
}
}
2. BigInteger的常见成员方法
方法名 | 说明 |
public BigInteger add(BigInteger val) | 加法 |
public BigInteger subtract(BigInteger val) | 减法 |
public BigInteger multiply(BigInteger val) | 乘法 |
public BigInteger divide(BigInteger val) | 除法,获取商 |
public BigInteger[] divideAndRemainder(BigInteger val) | 除法,获取商和余数 |
public boolean equals(object x) | 比较是否相同 |
public BigInteger pow(int exponent ) | 次幂 |
public BigInteger max/min(BigInteger val) | 返回较大值/较小值 |
public int intValue(BigInteger val) | 转为int类型整数,超出范围数据有误 |
public class BigIntegerTest {
public static void main(String[] args) {
//创建两个BigInteger对象
BigInteger bi1 = BigInteger.valueOf(10);
BigInteger bi2 = BigInteger.valueOf(5);
//1.加法
BigInteger bi3 = bi1.add(bi2);
System.out.println(bi3); //15
//2.除法 获取商和余数
BigInteger[] arr = bi1.divideAndRemainder(bi2);
System.out.println(arr.length); //2
System.out.println(arr[0]); //2 0索引:商
System.out.println(arr[1]); //0 1索引:余数
//3.比较是否相同
boolean result = bi1.equals(bi2);
System.out.println(result); // false
//4.次幂
BigInteger bi4=bi1.pow(2);
System.out.println(bi4); //100
//5.最大值
BigInteger bi5 = bi1.max(bi2);
System.out.println(bi5); //10
//没有改变内部值 只能判断比较而已
System.out.println(bi5 == bi1); //true
System.out.println(bi5 == bi2); //false
//转为int基本类型
BigInteger bi6 = BigInteger.valueOf(1000);
int i = bi6.intValue();
System.out.println(i); //1000
double j = bi6.doubleValue();
System.out.println(j); //1000.0
}
}
3. BigInteger的底层存储方式
① 对于计算机而言,其实是没有数据类型的概念的,都是01010101;
② 数据类型是编程语言自己规定的。
二、BigDecimal
- 用于小数的精确计算
- 用于表示很大的小数
- 作用:表示较大的小数和解决小数运算精度失真问题。
方法名 | 说明 |
构造方法获取BigDecimal对象 | public BigDecimal(double val) |
public BigDecimal(String val) | |
静态方法获取BigDecimal对象 | public static BigDecimal valueOf(double val) |
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
// 1.通过传递double类型小数来创建对象
// 细节:这种方式可能不精确 不建议使用
BigDecimal bd1 = new BigDecimal(0.01);
BigDecimal bd2 = new BigDecimal(0.09);
System.out.println(bd1); // 0.01000000000000000020816681711721685132943093776702880859375
System.out.println(bd2); // 0.0899999999999999966693309261245303787291049957275390625
// 2.通过传递字符表示的小数来创建对象
BigDecimal bd3 = new BigDecimal("0.01");
BigDecimal bd4 = new BigDecimal("0.09");
System.out.println(bd3); // 0.01
System.out.println(bd4); // 0.09
// 3.通过静态方法获取对象
BigDecimal bd5 = BigDecimal.valueOf(10);
System.out.println(bd5); // 10
BigDecimal bd6 = BigDecimal.valueOf(10.0);
BigDecimal bd7 = BigDecimal.valueOf(10.0);
System.out.println(bd6 == bd7); // false
// 细节:
// 1.如果要表示的数字不大,没有超出double取值范围,建议使用静态方法
// 2.如果要表示的数字比较大,超出了double取值范围,建议使用构造方法
// 3.如果我们传递的是0~10之间整数,那么方法会返回已经创建好的对象,不会new
}
}
1. BigDecimal的使用
方法名 | 说明 |
public static BigDecimal valueOf( double val) | 获取对象 |
public BigDecimal add( BigDecimal val) | 加法 |
public BigDecimal subtract(BigDecimal val) | 减法 |
public BigDecimal multiply(BigDecimal val) | 乘法 |
public BigDecimal divide(BigDecimal val) | 除法 |
public BigDecimal divide(BigDecimal val,精确几位,舍入模式) | 除法 |
public class BigDecimalTest {
public static void main(String[] args) {
//获取对象
BigDecimal bd1 = BigDecimal.valueOf(10.0);
BigDecimal bd2 = BigDecimal.valueOf(2.0);
//1.加法
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3); //12.0
//2.减法
BigDecimal bd4=bd1.subtract(bd2);
System.out.println(bd4); //8.0
//3.乘法
BigDecimal bd5 = bd1.multiply(bd2);
System.out.println(bd5); //20.0
//4.除法
BigDecimal bd6 = bd1.divide(bd2);
System.out.println(bd6); // 5
BigDecimal bd7 = BigDecimal.valueOf(4.0);
BigDecimal bd8 = bd1.divide(bd7);
System.out.println(bd8); //2.5
BigDecimal bd9 = BigDecimal.valueOf(3.0);
//BigDecimal bd10 = bd1.divide(bd9);
//System.out.println(bd10); //报错! 除不尽!
BigDecimal bd11 = bd1.divide(bd9, 2 , BigDecimal.ROUND_HALF_UP);
System.out.println(bd11); //3.33
}
}
2. BigDecimal的底层存储方式
十进制 => 二进制 (正负号、小数点、整数)