包装类、BigDecimal

有一些复杂的数据操作使用八种基本数据类型是没有办法做到的,像查看取值范围等。所以为了实现一些复杂的数据操作,Java在8种基本数据类型的基础上,为它们每一个都定义了一个对应的类,称为包装类。

基本数据类型所对应的包装类如下:

基本数据类型 对应的包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

将基础类型转换成对应的包装类后,就可以使用包装类的方法执行非常多的操作,有哪些方法可以去查看api文档,也可以直接看源码。

它们的互相转换称为装箱和拆箱:

  • 装箱:基础数据类型--->包装类

  • 拆箱:包装类--->基本数据类型

例:

package com.dh.packaging;

public class IntegerDemo {

    public static void main(String[] args) {
        
        //可直接实例化包装类对象,但是已经被弃用了
        Integer integer = new Integer(10);

        //JDK1.5之后,支持自动装箱和自动拆箱

        Integer i = 10; //自动装箱
        
        //可以使用i调用很多Integer包装类的方法,具体看api文档
        
        int i1 = i; //自动拆箱
        
        int i2 = i.intValue();//使用方法手动拆箱
        
        double d = 10;
        
        //i会先进行自动拆箱,与d进行运算后,再将结果自动装箱,保存到包装类对象d1中
        Double d1 = i + d;
    }
}

包装类与字符串的转换:

//包装类--->字符串
//利用""和+运算符
String s = ""+i;
//利用包装类的方法
String s1 = i.toString();

//字符串--->包装类
//利用包装类的方法将字符串转换为基本数据类型
int i3 = Integer.parseInt(s);

注意:

包装类定义为成员变量的默认值都为null,与基本数据类型不同。

包装类的方法有很多,使用也比较简单,故不在此赘述了,有需要时,可自行查看api文档~

BigDecimal

我们之前提到过,使用浮点数类型float和double进行计算会发生精度丢失的情况,但是一些地方是绝对不允许丝毫精度丢失的,这个时候我们就可以使用BigDecimal类进行精确的浮点数运算。

package com.dh.math;

import java.math.BigDecimal;

public class BigDecimalDemo {

    public static void main(String[] args) {

        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1 - d2);//结果为0.09999999999999998

        //使用BigDecimal进行运算
        //首先实例化一个对象,需要传递一个浮点数的字符串表示形式,内部会自己转化
        BigDecimal num1 = new BigDecimal("1.0");
        BigDecimal num2 = new BigDecimal("0.9");
        //然后调用方法进行计算
        //num1 - num2
        System.out.println(num1.subtract(num2));//结果为0.1
        
        //还可以进行加、乘、除、绝对值,将BigDecimal类型转换成基本数据类型等等......
    }
}

结果:

0.09999999999999998
0.1

BigDecimal还有很多的方法,可查看api文档~

posted @ 2021-01-23 09:18  deng-hui  阅读(259)  评论(0编辑  收藏  举报