深入理解Java:基本数据类型与包装类的奥秘_十进制

为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作。用于描述该对象的类就称为基本数据类型对象包装类。

  • 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
  • 常用的操作之一:用于基本数据类型与字符串之间的转换。
  • 基本类型和包装类的对应:Byte,Short,Integer,Long,Float,Double,Character,Boolean

基本数据类型

包装数据类型

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

2. 基本数据类型包装类应用

该包装对象主要用于基本类型和字符串之间的转换

2.1 基本类型 → 字符串

  • 基本类型数值+””
  • 用String类中的静态方法valueOf(基本类型数值);

2.2 字符串 → 基本类型

使用包装类中的静态方法xxx parseXxx(“xxx”);

  • int parseInt(String str);
  • long parseLong(String str);
  • boolean parseBoolean(String str);
  • 只有Character没有parse方法。

如果字符串被Integer进行对象的封装,可使用另一个非静态的方法,intValue。

将一个Integer对象转成基本数据类型值。

用Integer的静态方法valueOf(String s);

3. Integer类

3.1 Integer类概述

Integer 类在对象中包装了一个基本类型 int 的值
该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法

3.2 构造方法

public Integer(int value)
public Integer(String s)

PS:这个字符串必须是由数字字符组成

3.3 int类型和String类型的相互转换

返回值

方法

说明

int

intValue()

以 int 类型返回该 Integer 的值

int

parseInt(String s)

将字符串参数作为有符号的十进制整数进行解析

String

toString(int i)

返回一个表示指定整数的 String 对象

Integer

valueOf(int i)

返回一个表示指定的 int 值的 Integer 实例

Integer

valueOf(String s)

返回保存指定的 String 的值的 Integer 对象

代码示例:

package cn.itcast_03;  

/*
 * int类型和String类型的相互转换
 *  
 * int -- String
 *      String.valueOf(number)
 *  
 * String -- int
 *      Integer.parseInt(s)
 */  
public class IntegerDemo {  
    public static void main(String[] args) {  
        // int -- String  
        int number = 100;  
        // 方式1  
        String s1 = "" + number;  
        System.out.println("s1:" + s1);  
        // 方式2  
        String s2 = String.valueOf(number);  
        System.out.println("s2:" + s2);  
        // 方式3  
        // int -- Integer -- String  
        Integer i = new Integer(number);  
        String s3 = i.toString();  
        System.out.println("s3:" + s3);  
        // 方式4  
        // public static String toString(int i)  
        String s4 = Integer.toString(number);  
        System.out.println("s4:" + s4);  
        System.out.println("-----------------");  

        // String -- int  
        String s = "100";  
        // 方式1  
        // String -- Integer -- int  
        Integer ii = new Integer(s);  
        // public int intValue()  
        int x = ii.intValue();  
        System.out.println("x:" + x);  
        //方式2  
        //public static int parseInt(String s)  
        int y = Integer.parseInt(s);  
        System.out.println("y:"+y);  
    }  
}

运行结果:

3.4 常用的基本进制转换

返回值

方法

说明

String

toBinaryString(int i)

以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式

String

toOctalString(int i)

以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式

String

toHexString(int i)

以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式

3.5 十进制转换成其他进制

返回值

方法声明

功能描述

String

toBinaryString(int i)

十进制转换成二进制

String

toOctalString(int i)

十进制转换成八进制

String

toHexString(int i)

十进制转换成十六进制

String

toString(int i,int radix)

十进制转换成任何进制

3.6 其他进制到十进制

public static int parseInt(String s,int radix)

代码示例:

package cn.itcast_04;  

/*
 * 常用的基本进制转换
 * public static String toBinaryString(int i)
 * public static String toOctalString(int i)
 * public static String toHexString(int i)
 *  
 * 十进制到其他进制
 * public static String toString(int i,int radix)
 * 由这个我们也看到了进制的范围:2-36
 * 为什么呢?0,...9,a...z
 *  
 * 其他进制到十进制
 * public static int parseInt(String s,int radix)
 */  
public class IntegerDemo {  
    public static void main(String[] args) {  
        // 十进制到二进制,八进制,十六进制  
        System.out.println(Integer.toBinaryString(100));  
        System.out.println(Integer.toOctalString(100));  
        System.out.println(Integer.toHexString(100));  
        System.out.println("-------------------------");  

        // 十进制到其他进制  
        System.out.println(Integer.toString(100, 10));  
        System.out.println(Integer.toString(100, 2));  
        System.out.println(Integer.toString(100, 8));  
        System.out.println(Integer.toString(100, 16));  
        System.out.println(Integer.toString(100, 5));  
        System.out.println(Integer.toString(100, 7));  
        System.out.println(Integer.toString(100, -7));  
        System.out.println(Integer.toString(100, 70));  
        System.out.println(Integer.toString(100, 1));  
        System.out.println(Integer.toString(100, 17));  
        System.out.println(Integer.toString(100, 32));  
        System.out.println(Integer.toString(100, 37));  
        System.out.println(Integer.toString(100, 36));  
        System.out.println("-------------------------");  

        //其他进制到十进制  
        System.out.println(Integer.parseInt("100", 10));  
        System.out.println(Integer.parseInt("100", 2));  
        System.out.println(Integer.parseInt("100", 8));  
        System.out.println(Integer.parseInt("100", 16));  
        System.out.println(Integer.parseInt("100", 23));  
        //NumberFormatException  
        //System.out.println(Integer.parseInt("123", 2));  
    }  
}

运行结果:

3.7 自动拆装箱

package cn.itcast_05;  

/*
 * JDK5的新特性
 * 自动装箱:把基本类型转换为包装类类型
 * 自动拆箱:把包装类类型转换为基本类型
 *  
 * 注意一个小问题:
 *      在使用时,Integer  x = null;代码就会出现NullPointerException。
 *      建议先判断是否为null,然后再使用。
 */  
public class IntegerDemo {  
    public static void main(String[] args) {  
        // 定义了一个int类型的包装类类型变量i  
        // Integer i = new Integer(100);  
        Integer ii = 100;  
        ii += 200;  
        System.out.println("ii:" + ii);  

        // 通过反编译后的代码  
        // Integer ii = Integer.valueOf(100); //自动装箱  
        // ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再自动装箱  
        // System.out.println((new StringBuilder("ii:")).append(ii).toString());  

        Integer iii = null;  
        // NullPointerException  
        if (iii != null) {  
            iii += 1000;  
            System.out.println(iii);  
        }  
    }  
}

4. BigInteger

BigInteger:可以让超过Integer范围内的数据进行运算。超大整数相加的问题

方法声明

功能描述

add(BigInteger val)


subtract(BigInteger val)


multiply(BigInteger val)


divide(BigInteger val)


divideAndRemainder(BigInteger val)

返回商和余数的数组

BigInteger(String val)

构造方法

5. BigDecimal

不可变的、任意精度的有符号十进制数。由于在运算的时候,float类型和double很容易丢失精度,演示案例。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal

方法声明

功能描述

BigDecimal(String val)

构造方法

add(BigDecimal augend)


subtract(BigDecimal subtrahend)


multiply(BigDecimal multiplicand)


divide(BigDecimal divisor)


divide(BigDecimal divisor,int scale,int roundingMode)

商、几位小数、如何取舍