天天看点

CoreJava学习3——​基本类型的包装类

基本类型的包装类    

   Java语言的8种基本类型分别对应8种“包装类”,每一种包装类都封装了一个对应的基本类型成员变量,同时还提供了一些针对该数据类型的实用方法。

   包装类是让基本数据数据以对象的形式存在和使用。

1、编译器对包装类的支持

在JDK5之前,使用包装类进行运算较繁琐的“拆箱”和“装箱”操作:即运算前先包装类对象所封装的基本数据类型,运算后在将结果封装成包装类对象。

   Integer i = Integer.valueOf(100);

   Integer i = Integer.valueOf(200);

   Integer k = Integer.valueOf(i.intValue()+j.intValue());

JDK5增加了自动“拆箱”和“装箱”的功能,就简单多了。

   Integer i = 100;

   Integer i = 200;

   Integer k = i+j;

自动“拆箱”和“装箱”是编译器的“预处理”操作。

2、Integer和Double常用方法    

  Integer.parseInt(obj):转换为int或者double,无法解析时候抛出 NumberFormatException    

  Integer.toBinaryString(int);

  Integer.toHexString(int);

  分别把int转换成二进制和十六进制的字符串序列。

3、BigDecimal类

Java浮点数据类型(float/double)在运算时会有舍入误差,如果希望得到精确的计算结果,可以使用java.math.BigDecimal类。

       BigDecimal d1 = new BigDecimal("2.5");

       BigDecimal d2 = new BigDecimal("3.6");

       System.out.println(d1.subtract(d2));//减法

       System.out.println(d1.add(d2));//加法

       System.out.println(d1.multiply(d2));//乘法

       //除法

       /*注意:

        *     使用除法要使用舍入原则

        *     否则当遇到无限小数时,会一直除到溢出,无限下去就溢出。

        *     使用BigDecimal.ROUND_HALF_UP 为其四舍五入。

        */

       System.out.println(d1.divide(d2, BigDecimal.ROUND_HALF_UP));

当我们对计算精度有严格要求时,会使用该类,不过在大多情况下double足够。

4、BigInteger类

java提供的整数类型(int和long)的储存范围有限,当需要进行在更大的整数运算时可以使用这个类,理论上讲BigInteger的储存范围之受内存容量的限制。

同样也有加减乘除运算。只不过只针对整数运算。

       BigInteger sum = BigInteger.valueOf(1);

       for (int i = 2; i <= 200; i++) {

           //multiply参数要求BigInteger,所以i也要转换为BigInteger

           sum = sum.multiply(BigInteger.valueOf(i));

       }

       System.out.println(sum.toString().length());//结果的长度

       System.out.println(sum);

       //试试看有多少光年?

       sum = sum.divide(BigInteger.valueOf(3600*24*360).multiply(BigInteger.valueOf(300000)));