![9143e08a184e2cf41bfdfa31f9cada5f.png](https://img-blog.csdnimg.cn/img_convert/9143e08a184e2cf41bfdfa31f9cada5f.png)
在 Java 中,有许多数字处理的类,比如 Integer类,但是Integer类有一定的局限性。
我们都知道 Integer 是 Int 的包装类,int 的最大值为 2^31-1。若希望描述更大的整数数据时,使用Integer 数据类型就无法实现了,所以Java中提供了BigInteger 类。
BigInteger类型的数字范围较Integer,Long类型的数字范围要大得多,它支持任意精度的整数,也就是说在运算中 BigInteger 类型可以准确地表示任何大小的整数值而不会丢失任何信息。
下面,让我们一起来学习一下BigInteger的常用方法:
正文
读入方法
nextBigInteger():控制台读入一个BigInteger型数据,类似于int型的nextInt();
![532f6cb0de97c038fbd2485f9796569c.png](https://img-blog.csdnimg.cn/img_convert/532f6cb0de97c038fbd2485f9796569c.png)
构造方法
默认为十进制,也是我们最常用的,同时也支持自定义进制类型(已存在的);
![dee16518ca33026aa6216e8aedce2c25.png](https://img-blog.csdnimg.cn/img_convert/dee16518ca33026aa6216e8aedce2c25.png)
基本运算
返回值为BigInteger类型:add(),subtract(),multiply(),divide(),mod(),remainder(),pow(),abs(),negate();
![f290e9c60b16818c70b05e31b77edb8c.png](https://img-blog.csdnimg.cn/img_convert/f290e9c60b16818c70b05e31b77edb8c.png)
比较大小
compareTo()返回一个int型数据:1 大于; 0 等于; -1 小于;
max(),min():分别返回大的(小的)那个BigInteger数据;
![85dc19b76644495dce7a4a20f6d918fd.png](https://img-blog.csdnimg.cn/img_convert/85dc19b76644495dce7a4a20f6d918fd.png)
常量
ZERO,ONE,TEN 返回值为BigInteger类型:有朋友提到的-1,2,源码注释里面已表明不再输出(Not exported.);
![494f9a6d8376fcb2635560dc4b5d9cbb.png](https://img-blog.csdnimg.cn/img_convert/494f9a6d8376fcb2635560dc4b5d9cbb.png)
类型转换
将BigInteger数据转换成基本数据类型,还可以转换成radix进制的字符串形式;
![1c14603ef0ba6e7ee7617008a2ac8953.png](https://img-blog.csdnimg.cn/img_convert/1c14603ef0ba6e7ee7617008a2ac8953.png)
二进制运算
返回值为BigInteger类型,此类方法不常用,有备无患;
![77335f40314444069bd71bf7bc216198.png](https://img-blog.csdnimg.cn/img_convert/77335f40314444069bd71bf7bc216198.png)
权限控制
setBit(),testBit():可用于菜单的权限控制,非常好用,原理如下:
![4a9b452e4e0866ec652e1d91c1efc72c.png](https://img-blog.csdnimg.cn/img_convert/4a9b452e4e0866ec652e1d91c1efc72c.png)
源码分析
setBit():将set进去变量作为二进制数,计算它们的和,并以十进制显示;
testBit():与setBit()相反,验证this的二进制组成元素中是否包含传入的变量;
![edcf26bbf7d5f154c0b6544ca8ed84e4.png](https://img-blog.csdnimg.cn/img_convert/edcf26bbf7d5f154c0b6544ca8ed84e4.png)
小结
- BigInteger也是不可变的,在进行每一步运算时,都会产生一个新的对象。
- 发生异常算术条件时,会抛出ArithmeticException异常。例如,一个整数除以“0”,会抛出一个这个类的实例;
- 假设计算一个int数据平方与另一个大小的问题,很可能会内存溢出。除了使用二分法外,利用BigInteger的compareTo方法也是一个好选择,简单易懂,而且不需要算法支持;
- 本章作为笔记使用,内容比较全面,但常用的只有:构造函数,基本运算以及compareTo(),intValue(),setBit(),testBit()方法;
- setBit()和testBit()方法可用于菜单的权限控制,小编在开发中多次尝试,非常好用。很多微博有相关介绍,在这里我不做项目演示了。