刚才接触过了Object类,可以发现Object类能够接收所有的引用数据类型(对象、数组、接口),于是这里面又出现了一个新的问题,就是数据类型分为基本类型和引用类型两类,那么基本数据类型该如何处理呢?
一. 包装类简介
所谓的包装类型指的就是将基本数据类型封装在一个类中,就好比如下的代码:
class MyInt {
private int num ;
public MyInt (num) {
this.num = num ;
}
public int intValue () {
return this.num ;
}
}
这个时候的MyInt实际上就是int数据类型的包装类,利用MyInt可以实现基本数据类型变为对象的需求。
范例:包装类的使用
class TestDemo {
public static void main(String args[]) {
Object obj = new MyInt(10) ;
MyInt temp = (MyInt) obj ;
System.out.println(temp.intValue() * 2) ;
}
}
结论:将基本数据类型包装为一个类对象的本质就在于方便的使用Object进行接收处理。Java中有8种基本数据类型,如果每种数据类型都按照以上的方式编写,那么会存在有如下问题:
①发现所有的开发中代码会重复;
②在进行数学计算的时候必须利用明确的方法将包装类中包装的基本类型数据取出后才可以进行操作。
所以Java为了方便用户的开发,专门提供了包装类的使用,而对于包装类提供有两种类型:
①对象型(Object直接子类):Boolean、Charactor(char);
②数值型(Number直接子类):Byte、Double、Short、Long、Integer(int)、Float;
说明:关于Number类
①Number类的定义:
public abstract class Number
extends Object
implements Serializable
②在Number类里面实际上定义有6个重要的方法:byteValue()、doubleValue()、floatValue()、intValue()、longValue()、shortValue()
二. 装箱与拆箱
在包装类与基本数据类型的处理之中存在有两类概念:
❤装箱:将基本数据类型变为包装类对象;
|-利用每一个包装类提供的构造方法实现装箱处理。
❤拆箱:将包装类中包装的基本数据类型取出;
|-利用Number类中提供的xxValue()方法;
范例:
class TestDemo {
public static void main(String args[]) {
Double num = new Double(10.1) ;
double x = num.doubleValue() ;
System.out.println(x * 2) ;
}
以上的操作采用的是手工的装箱与拆箱处理操作形式,而这种做法是在JDK1.5之前的做法,而从JDK1.5之后开始提供有自动装箱与自动拆箱的机制,最为重要的是,由于此类机制的存在,可以直接利用包装类的对象进行各种数学计算。
范例:自动装箱与自动拆箱处理
class TestDemo {
public static void main(String args[]) {
Integer x1 = 10 ; // 自动装箱
System.out.println(++ x1 * 2) ; // 自动拆箱
}
但是这个时候依然会存在有“==”和equals()问题
class TestDemo {
public static void main(String args[]) {
Integer num1 = 10 ;
Integer num2 = 10 ;
System.out.println(num1 == num2) ;
System.out.println(num1 == new Integer (10)) ;
System.out.println(num1.equals(new Integer (10))) ;
System.out.println() ;
}
选择:使用int还是Integer?
❤在接收数据的时候,使用的一定都是int,而保存数据的时候会使用Integer;
❤以后编写的简单Java类统一不要再去使用基本数据类型,全部更换为包装类。
三. 字符串与基本数据类型转换
以后如果要进行各种数据的输入一定都是字符串类型的接收。所以在开发之中就存在有一种需求,如何将字符串变为各个基本数据类型,这个时候就需要包装类支持了:
1. String变为int类型(Integer类):public static int parseInt(Strings)
2. String变为double类型(Double类):public static double parseDouble(Strings)
3. String变为boolean类型(Boolean类):public static boolean parseBoolean(Strings)
范例:
String str = "123" ;
int num = Integer.parseInt(str) ; // 通过包装类中的方法将字符串变为基本数据类型
System.out.println(num * 2) ;
但是特别需要引起注意的是,如果在将字符串变为数字的时候,字符串的组成有非数字,那么转化就将出现错误(NumberFormatException),以后就因为这个异常,我们要写一堆的程序来回避它。
反过来,如果现在要想将基本数据类型变为字符串则有两种形式:
1. 任何的数据类型使用了“+”连接空白字符串就变为了字符串类型:
范例:String str = 100 + "" ;
该方法占用了堆内存,产生垃圾。
2. 使用String类中提供的一个valueOf()方法,这个方法可以进行转换,而且被重载了很多次:
范例:String str = String.valueOf(100) ;
总结:以后的开发一定会牵扯到字符串转其他基本数据类型的处理。