Java常用类笔记(学习尚硅谷java基础教程)
阅读原文时间:2023年07月09日阅读:1

一、Java根类Object类
1、toString()方法
1)以文本对象返回,故toString()的定义为public String toString() {}
2)默认的字符串输出是:包.类名@对象的十六进制哈希码。【每一个java对象都有一个hash Code用于标识对象】
3)可以重写。比如返回对象的某些属性等。 return "这个对象的名字是【"+name+"】,年龄是【"+age+"】。";
4)System.out.println(对象名); 自动调用toString()方法。区别System.out.println(变量名)直接打印这个变量的值。

2、equals()方法
1)equals()方法用于比较两个对象的内容是否相同。而”==“运算符是比较两个引用变量是否指向同一个实例。
2)可以重写,比如比较两个对象的属性值。

二、String类: (区别于int char和boolean。)
一、常用特性
String声明为final类,不可被继承。public final class String……
String接口特性:实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小的。
通过字符数组存储字符串数据:private final char value[];
String的不可变特性:【出现以下情况时都是在方法区常量池中新建一个地址用于存放新的字符】
1.当对字符串重新赋值时。
2.当对现有的字符串进行连接操作时。
3.当调用String的replace()方法修改指定字符或字符串时。
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
字符串常量池中是不会存储相同内容的字符串的。
二、String的实例化方法
1、通过字面量的方法声明的数据被存放在方法区的字符串常量池中。
2、通过new+构造器的方法声明的数据被存放在开辟的堆空间中。当然具体初始化的数据还是会存放在常量池中,堆中的value指向常量池中的数据。
三、字符串的拼接存储特性:
 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。
JVM中字符串常量池存放位置说明:
jdk 1.6(jdk 6.e,java 6.e):字符串常量池存储在方法区(永久区)
jdk 1.7:字符串常量池存储在堆空间
jdk 1.8:字符串常量池存储在方法区(元空间)|
 只要其中有一个是变量,结果就在堆中
 如果拼接的结果调用intern()方法,返回值就在常量池中
String s1="Hello";
String s2="World";
String s3="HelloWorld";
String s4="Hello"+"World";
String s5=s1+"World";
String s6="Hello"+s2;
String s7=s1+s2;

                //true  
                System.out.println(s3 == s4);  
                //以下都是false  
                System.out.println(s3 == s5);  
                System.out.println(s3 == s6);  
                System.out.println(s3 == s7);  
                System.out.println(s5 == s6);  
                System.out.println(s5 == s7);  
                System.out.println(s6 == s7);  

                String s8=s5.intern();  
                //输出:true。intern返回值在常量池中  
                System.out.println(s3 == s8);  
四、String属于引用数据类型。在传递参数时基本数据类型传递时的数据,引用数据类型传递的是地址。  
    String和char\[\]数组都属于引用数据类型,但是String有不可变性的属性。但是当其他变量指向了这个String类型变量,如果后面的变量发生改变,  
        原来String变量是不会改变的。只会重新开辟一个新的空间来存放,而不影响原有变量。而char\[\]数组没有不可变性,当变量变量指向同一个地址时,  
        其中一个改变会引起另外一个发生改变。  
    附加:char\[\]数组输出后自动拼接字符:  
        char\[\] ch = { 't', 'e', 's', 't' };  
                int\[\] ints={1,2,3,4,5};  
                float\[\] fla={1,2,3};  
                double\[\] dou={1,2,3};  
                System.out.println(ch);  //test  
                System.out.println(ints);//\[I@4554617c  
                System.out.println(fla); //\[F@74a14482  
                System.out.println(dou); //\[D@1540e19d  
五、String使用陷阱  
     String s1 = "a";  
    说明:在字符串常量池中创建了一个字面量为"a"的字符串。  
     s1 = s1 + "b";  
    说明:实际上原来的“a”字符串对象已经丢弃了,现在在堆空间中产生了一个字符串s1+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,  
    会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能。  
     String s2 = "ab";  
    说明:直接在字符串常量池中创建一个字面量为"ab"的字符串。  
     String s3 = "a" + "b";  
    说明:s3指向字符串常量池中已经创建的"ab"的字符串。  
     String s4 = s1.intern();  
    说明:堆空间的s1对象在调用intern()之后,会将常量池中已经存在的"ab"字符串  
    赋值给s4。  
六、常用方法:  
    int length():返回字符串的长度: return value.length  
    char charAt(int index): 返回某索引处的字符return value\[index\]  
    boolean isEmpty():判断是否是空字符串:return value.length == 0  
    String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写  
    String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写  
    String trim():返回字符串的副本,忽略前导空白和尾部空白  
    boolean equals(Object obj):比较字符串的内容是否相同  
    boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写  
    String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”  
    int compareTo(String anotherString):比较两个字符串的大小  
    String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。  
    String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。  
    boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束  
    boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始  
    boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始  
    boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true  
    int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引  
    int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始  
    int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引  
    int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索  
    String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。  
    String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。  
    String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。  
    String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。  
    boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。  
    String\[\] split(String regex):根据给定正则表达式的匹配拆分此字符串。  
    String\[\] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。  
    String 与基本数据类型、包装类之间的转换。  
      String --> 基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)  
      基本数据类型、包装类 --> String:调用String重载的valueOf(xxx)  
    String 与 char\[\]之间的转换  
      String --> char\[\]:调用String的toCharArray()  
      char\[\] --> String:调用String的构造器  
七、String、StringBuffer、StringBuilder  
    java.lang.StringBuffer代表可变的字符序列,JDK1.0中声明,可以对字符串内容进行增删,此时不会产生新的对象。很多方法与String相同。作为参数传递时,  
    方法内部可以改变值  
    1、区别  
        String:不可变的字符序列;                                      底层使用char\[\]存储  
        StringBuffer:可变的字符序列;线程安全的,效率低;                 底层使用char\[\]存储  
        StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高; 底层使用char\[\]存储  
    2、StringBuffer  
        StringBuffer():初始容量为16的字符串缓冲区  
        StringBuffer(int size):构造指定容量的字符串缓冲区  
        StringBuffer(String str):将内容初始化为指定字符串内容  
        StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接  
        StringBuffer delete(int start,int end):删除指定位置的内容  
        StringBuffer replace(int start, int end, String str):把\[start,end)位置替换为str  
        StringBuffer insert(int offset, xxx):在指定位置插入xxx  
        StringBuffer reverse() :把当前字符序列逆转  
        public int indexOf(String str)  
        public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串  
        public int length()  
        public char charAt(int n )  
        public void setCharAt(int n ,char ch)  
    3、StringBuilder  
        StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且提供相关功能的方法也一样  
    4、String与StringBuffer、StringBuilder之间的转换  
      string-->StringBuffer、StringBuilder:调用stringBuffer、StringBuilder构造器  
      StringBuffer、StringBuilder--> 方法一:String:调用String构造器。 方法二: StringBuffer、StringBuilder的toString()方法  

三、JDK8之前日期时间API
1. java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。 此方法适于计算时间差。
计算世界时间的主要标准有:
UTC(Coordinated Universal Time)
GMT(Greenwich Mean Time)
CST(Central Standard Time)
2、java.util.Date类表示特定的瞬间,精确到毫秒。
构造器:
 Date(): 使用无参构造器创建的对象可以获取本地当前时间。
 Date(long date): 创建指定毫秒数的date对象。
常用方法
 getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
 toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天
        (Sun, Mon, Tue,Wed, Thu, Fri, Sat),zzz是时间标准。
 其它很多方法都过时了。

3. java.sql.Date类  
    构造器:  
         java.sql.Date(long date): 创建指定毫秒数的date对象。  
    常用方法  
         getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 java.sql.Date 对象表示的毫秒数。  
         toString():把此 Date 对象转换为以下形式:2020-10-11  
    如何将java.util.Date对象转换为java.sql.Date对象  
        //情况一:  
        Date date = new java.sql.Date(2343243242323L);  
        java.sql.Date date1 = (java.sql.Date) date;  
        //情况二:  
        Date date2 = new Date();  
        java.sql.Date date3 = new java.sql.Date(date2.getTime());  
4. java.text.SimpleDateFormat类  
    构造器  
        无参构造器:产生默认的格式,比如”20-10-11 下午7:12“。  
        有参构造器:可以自定义格式,可以通过指定的方式格式化和解析,参见API。比如SimpleDateFormat simple = new SimpleDateFormat("yyyy年MM月dd日");  
    方法:  
        format():从默认时间格式到设置字符格式。  
        parse(): 从设置字符格式到默认时间格式。  
                 需要抛出 ParseException异常,防止输入的格式不匹配创建对象时设置的格式。  
5. java.util.Calendar(日历)类    \*\*\*\*\*\*Calendar是抽象基类\*\*\*\*\*  
    实例化:因为是抽象类,所以不能创建其对象。  
        方式一:创建其子类(GregorianCalendar)的对象  
        方式二:调用其静态方法getInstance()、  
            这两种方式创建的对象对位Calendar子类GregorianCalendar的对象  
                GregorianCalendar gc = new GregorianCalendar();  
                //getClass()方法输出当前对象是属于哪个方法的对象  
                //输出class java.util.GregorianCalendar  
                System.out.println(gc.getClass());  

                //方式二:调用其静态方法getInstance()  
                Calendar cal = Calendar.getInstance();  
                //输出class java.util.GregorianCalendar  
                System.out.println(cal.getClass());  
    用法:  
        一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、MONTH、DAY\_OF\_WEEK、HOUR\_OF\_DAY 、MINUTE、SECOND  
            //运行时间时间:2020年9月11日星期天,20时:43分:24秒  
            GregorianCalendar calendar = new GregorianCalendar();  
            System.out.println(calendar.get(Calendar.YEAR));      //2020  
            System.out.println(calendar.get(Calendar.MONTH));     //9  
            System.out.println(calendar.get(Calendar.DAY\_OF\_MONTH));   //11  
            System.out.println(calendar.get(Calendar.DAY\_OF\_WEEK));    //1  
            System.out.println(calendar.get(Calendar.HOUR\_OF\_DAY));    //20  
            System.out.println(calendar.get(Calendar.MINUTE));         //43  
            System.out.println(calendar.get(Calendar.SECOND));         //24  

        注意:  
             获取月份时:一月是0,二月是1,以此类推,12月是11  
             获取星期时:周日是1,周二是2 , 。。。。周六是7  

    常用方法  
        get():返回给定日历字段的值 \[例如Calendar.DAY\_OF\_MONTH 形式叫做一个日历字段\]  
            GregorianCalendar calendar = new GregorianCalendar();  
            int days = calendar.get(Calendar.DAY\_OF\_MONTH);  
            System.out.println(days);  
            //输出:当前时间中这个月的第几天。  

        set():将给定的日历字段设置为给定的值  
            //calendar可变性:set返回值为void。所以调用set方法时直接改变了对象属性。  
            calendar.set(Calendar.DAY\_OF\_MONTH,22);  
            days = calendar.get(Calendar.DAY\_OF\_MONTH);  
            //输出:22   不管现在时月的第几天,已经设置成了22.  
            System.out.println(days);  

        add():将指定的(已签名的)时间添加到给定的日历字段。正数增加,负数回退。  
            calendar.add(Calendar.DAY\_OF\_MONTH,-3);  
            days = calendar.get(Calendar.DAY\_OF\_MONTH);  
            //输出:19    从22号回退3天即19号。  
            System.out.println(days);  

        getTime():日历类---> Date  
            Date date = calendar.getTime();  
            //输出:Mon Oct 19 21:09:33 CST 2020     与Date类创建的对象输出类似(获取星期时:周日是1,周二是2 , 。。。。周六是7):所以相处一天  
            System.out.println(date);  
            Date date1 = new Date();  
            //输出:Sun Oct 11 21:09:33 CST 2020    跟上面结果格式相同  
            System.out.println(date1.toString());  

        setTime():Date ---> 日历类  
            Date date2 = new Date();  
            calendar.setTime(date2);  
            days = calendar.get(Calendar.DAY\_OF\_MONTH);  
            //输出:11(11号)  
            System.out.println(days);  

四、JDK8中新日期时间API
一、解决问题旧的API问题:
可变性:像日期和时间这样的类应该是不可变的。
偏移性:Date中的年份是从1900开始的,而月份都从0开始。
格式化:格式化只对Date有用,Calendar则不行。
此外,它们也不是线程安全的;不能处理闰秒等。
二、主要包:
java.time – 包含值对象的基础包
本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。
java.time.chrono – 提供对不同的日历系统的访问
java.time.format – 格式化和解析时间和日期
java.time.temporal – 包括底层框架和扩展特性
java.time.zone – 包含时区支持的类
说明:大多数开发者只会用到基础包和format包,也可能会用到temporal包。因此,尽
管有68个新的公开类型,大多数开发者,大概将只会用到其中的三分之一。
三、重点内容:
一、类:
LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储 生日、纪念日等日期。
LocalTime表示一个时间,而不是日期。
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
Instant是用来表示在时间线上的瞬间点。
DateTimeFormatter:格式化或解析日期、时间类似于SimpleDateFormat
……
二、方法:
LocalTime、、LocalDate、LocalDateTime类的方法
now():静态方法。获取当前的日期、时间、日期+时间
of():静态方法。设置指定的年、月、日、时、分、秒。没有偏移量
getXxx():获取相关的属性
withXxx():将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象(with相当于set的意思)
plusXxx():向当前对象添加几天、几周、几个月、几年、几小时并返回新的对象。
minusXxx():从当前对象减去几月、几周、几天、几年、几小时并返回新的对象。
Instant类的方法
now() :静态方法,返回默认UTC时区的Instant类的对象。从指定的时钟获取当前时刻。获取本初子午线对应的标准时间
atOffset(ZoneOffset offset):结合即时的偏移来创建一个 OffsetDateTime
ofEpochMilli(long epochMilli):静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象
toEpochMilli():返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳
DateTimeFormatter方法
三种格式化方式:
 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)。 FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTime
 自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
方法:
format(TemporalAccessor t): 格式化一个日期、时间,返回字符串
parse(CharSequence text): 将指定格式的字符序列解析为一个日期、时间
ofPattern(String pattern):静态方法 , 返 回 一 个 指 定 字 符 串 格 式 的DateTimeFormatter

四、其它API  
    ZoneId:该类中包含了所有的时区信息,一个时区的ID,如 Europe/Paris  
    Clock:使用时区提供对当前即时、日期和时间的访问的时钟。  
    持续时间:Duration,用于计算两个“时间”间隔  
    日期间隔:Period,用于计算两个“日期”间隔  
    TemporalAdjuster : 时间校正器。有时我们可能需要获取例如:将日期调整到“下一个工作日”等操作。  

五、 Java比较器-----对象数组的排序问题,涉及到对象之间的比较问题
一、前言
ava中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
        所以产生了java比较器。
二、实现:
使用两个接口中的任何一个:Comparable 或 Comparator
三、自然排序:java.lang.Comparable
1、简明:自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序.
2、实现:
 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。
 实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
 对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals一致。建议(虽然不是必需的)最好使自然排序与 equals 一致。
3、重写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
4、Comparable 的典型实现:(默认都是从小到大排列的)
String:按照字符串中字符的Unicode值进行比较
Character:按照字符的Unicode值来进行比较
数值类型对应的包装类以及BigInteger、BigDecimal:按照它们对应的数值大小进行比较
Boolean:true 对应的包装类实例大于 false 对应的包装类实例
Date、Time等:后面的日期时间比前面的日期时间大
5、菜鸡杂记
Arrays.sort(goodslist);
System.out.println(Arrays.toString(goodslist));
数组的sort方法的调用:
数组的sort方法的定义为 public static void sort(Object[] a) {}。是静态的,可以直接类名.方法名。
无返回值,而是直接把数组进行了排序
()内为一个数组对象。要对这个数组对象排序那么这个数组类就要实现Comparable 或 Comparator,(Object obj) 方法

    四、定制排序:java.util.Comparator  
        1、简明  
            当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码(如jdk原有的),或者实现了java.lang.Comparable接口的排序规则不适合当前的操作(如:String从大到小),那么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排序的比较。  
        2、实现:  
            重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。  
        3、其他:  
             可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。  
             还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。  
        4、案例:  
            public void comparatorTest(){  
                    String\[\] arr = new String\[\]{"AA","CC","KK","MM","GG","JJ","DD"};  
                    Arrays.sort(arr, new Comparator<String>() {  
                        @Override  
                        //改变compareTo默认的从小到大排列,按照字符串从大到小的顺序排列  
                        public int compare(String o1, String o2) {  
                            return -o1.compareTo(o2);  
                        }  
                    });  
                    //输出结果:\[MM, KK, JJ, GG, DD, CC, AA\]  
                    System.out.println(Arrays.toString(arr));  
                }  
    五、Comparable接口与Comparator的使用的对比:  
       \*Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小。  
       \*Comparator接口属于临时性的比较。  

六、System类
 System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。
 成员变量
 System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
 成员方法
 native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
 void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
 void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
 String getProperty(String key):该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
java.version Java运行时环境版本
java.home Java安装目录
os.name 操作系统的名称
os.version 操作系统的版本
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录

七、Math类
一、初始:java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型。
二、常用方法:
abs 绝对值
acos,asin,atan,cos,sin,tan 三角函数
sqrt 平方根
pow(double a,doble b) a的b次幂
log 自然对数
exp e为底指数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度—>角度
toRadians(double angdeg) 角度—>弧度

九、BigInteger
 Integer类作为int的包装类,能存储的最大整型值为2^31-1,Long类也是有限的,最大为2^63-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
 java.math包的BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
 构造器:BigInteger(String val):根据字符串构建BigInteger对象
 常用方法
 public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
 BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
 BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
 BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
 BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。
 BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
 BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
 BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger。

十、BigDecimal
 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数字精度比较高,故用到java.math.BigDecimal类。
 BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
 构造器
 public BigDecimal(double val)
 public BigDecimal(String val)
 常用方法
 public BigDecimal add(BigDecimal augend)
 public BigDecimal subtract(BigDecimal subtrahend)
 public BigDecimal multiply(BigDecimal multiplicand)
 public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

视频网址:https://www.bilibili.com/video/BV1Kb411W75N