Java学习笔记Day13
BigInteger
在Java中,整数有四种类型:byte、short、int、long
在底层占用字节个数:byte 1个字节、short 2个字节 、int 4个字节 、long 8个字节
构造方法
方法名 | 说明 |
---|---|
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的对象,内部有优化 |
对象一旦创建,内部记录的值不能发生改变
小结
- 如果BigInteger表示的数字没有超出long的范围,可以用静态方法获取
- 如果BigInteger表示的数字超出long的范围,可以用构造方法获取
- 对象一旦创建,BigInteger内部记录的值不能发生改变
- 只要进行计算都会产生一个新的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类型整数,超出范围数据有误 |
BigInteger底层存储方法
- 对于计算机而言,其实是没有数据类型的概念,都是01010101.
- 数据类型是编程语言自己规定的。
BigDecima
计算机中的小数
类型 | 占用字节数 | 总bit位 | 小数部分bit位数 |
---|---|---|---|
float | 4个字节 | 32个bit位 | 23个bit位 |
double | 8个字节 | 64个bit位 | 52个bit位 |
作用
- 用于小数的精确计算
- 用来表示很大的小数
创建对象
-
通过传递double类型的小数来创建对象
-
细节:这种方式有可能是不精确的,所以不建议使用
-
BigDecimal bd1 = new BigDecimal(0.01); BigDecimal bd2 = new BigDecimal(0.09);System.out.println(bd1); // 0.01000000000000020816 System.out.println(bd2); // 0.089999999999999999666
-
-
通过字符串表示的小数来创建对象
-
BigDecimal bd3 = new BigDecimal("0.01"); BigDecimal bd4 = new BigDecimal("0.09");System.out.println(bd3); // 0.01 System.out.println(bd4); // 0.09
-
-
通过静态方法获取对象
-
BigDecimal bd5 = BigDecimal.valueOf(10); System.out.println(bd5);
-
细节
- 如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法
- 如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法
- 如果我们传递的是0~10之间的整数,包含0,包含10,那么方法会返回已经创建好的对象,不会重新new
成员方法
方法名 | 说明 |
---|---|
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,精确几位,舍入模式) | 除法 |
正则表达式
正则表达式可以校验字符串是否满足一定的规则,并用来校验数据格式的合法性。
体验正则表达式
需求:假如现在要求校验一个QQ号码是否正确。
规则:6位及20位,0不能再开头,必须全部是数字
// 以前知识
public static boolean checkQQ(String qq){int len = qq.length();if(len < 6 || len > 20){return false;}if(qq.startsWith("0")){return false;}for(int i = 0;i < len ;i++){char c = qq.charAt(i);if(c < '0' || c > '9'){return false;}}return true;
}// 正则表达式
qq.matches("[1-9]\\d{5-19}");
正则表达式的作用
- 校验字符串是否满足规则
- 在一段文本中查找满足要求的内容
规则
- 字符类(只匹配一个字符)
- [abc] 只能是a,b,c
- [^abc] 除了a,b,c之外的任何字符
- [a-zA-Z] a到z,A到Z,包括(范围)
- [a-d[m-p]] a到d,或m到p
- [a-z&&[def]] a-z和def的交集,为:d、e、f
- [a-z&&[ ^bc ]] a-z和非bc的交集(等同于[ad-z])
- [a-z&&[ ^ m-p ]] a-z和除了m-p的交集(等同于[a-lq-z])
- 预定义字符类(只匹配一个字符)
- . 任何字符
- \d 一个数字:[0-9]
- \D 非数字:[ ^0-9]
- \s 一个空白字符:[ \t \n \x0B \f \r]
- \S 非空白字符:[ ^\s]
- \w [a-zA-Z_0-9] 英文、数字、下划线
- \W [ ^\w]一个非单词字符
- 数量词
- X? X,一次或0次
- X* X,零次或多次
- X+ X,一次或多次
- X{n} X,正好n次
- X{n,} X,至少n次
- X{n,m} X,至少n次但不超过m次