Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使用基本类型对应的包装类,如下:
知识点回忆:ArrayList里的泛型要求只能是引用类型,不能是基本类型。因此需要对基本类型进行自动装箱操作,转换为包装类。
包装类:可以使用一个类,把基本类型的数据装起来,在类中定义一些方法,这个类叫做包装类。
可以使用类中的方法来操作这些基本类型的数据。
基本类型 | 对应的包装类(位于java.lang包下) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
基本类型与对应的包装类对象之间,来汇转换的过程称为”装箱“和”拆箱“:
装箱:从基本类型转换为对应的包装类对象。
拆箱:从包装类对象转换为对应的基本类型。
我们以int和Integer举例:
装箱:
构造方法:Integer(int value)构造一个新分配的Integer对象,它表示指定的int值。
Integer(String s)构造一个新的Integer对象,它表示String参数所指示的int值。(这个字符串,必须是基本类型的字符串,否则会抛出异常)
静态方法:static Integer valueOf(int i)返回一个表示指定的int值的Integer实例。
static Integer valueOf(String s)返回保存指定的String的值的Integer对象。
拆箱:
成员方法:int intValue()以int类型返回该Integer的值。
public static void main(String[] args) { //装箱:从基本类型转换为对应的包装类对象。 //构造方法:Integer(int value)构造一个新分配的Integer对象,它表示指定的int值。 Integer integer1 = new Integer(1);// 方法被标记,已过时 System.out.println(integer1); //1 打印对象不是地址值,重写了toString()方法 //Integer(String s)构造一个新的Integer对象 Integer integer2 = new Integer("222"); System.out.println(integer2);//222 //静态方法:static Integer valueOf(int i)返回一个表示指定的int值的Integer实例。 Integer integer3 = Integer.valueOf(3); // 静态方法,类名直接调用 System.out.println(integer3);//3 //static Integer valueOf(String s)返回保存指定的String的值的Integer对象。 Integer integer4 = Integer.valueOf("222"); // 静态方法,类名直接调用 System.out.println(integer4); // 222 // 拆箱 // 成员方法:int intValue()以int类型返回该Integer的值。 int i = integer1.intValue(); System.out.println(i); //1 }
自动装箱与自动拆箱
由于经常需要做基本类型与包装类之间的转换,从JDK 1.5+开始,基本类型与包装类的装箱、拆行动作可以自动完成。
private static void demo01(){ // 自动装箱int-->Integer // 相当于Integer integer = new Integer(1) Integer integer = 1; System.out.println(integer); //自动拆箱Integer-->int // in是包装类,无法直接参与运算,可以自动转换为基本数据类型,再进行计算 // Integer + int = Integer // --> int + int = Integer自动拆箱,相当于Integer.intValue() + int //--> int = Integer //-->Integer = Integer自动装箱 integer = integer + 2; System.out.println(integer); }
基本类型与字符串之间的转换
1.基本类型转换为String
基本类型转换为String总共有三种方式:
A.基本类型直接与""相连接即可,如34+""
B.包装类的静态方法toString(参数),不是Object类的toString()重载的关系。
static String toString(int i)返回一个指定整数的String对象。
C.String类的静态方法valueOf(参数)
static String valueOf(int i)返回int参数的字符串表示形式。
// 基本类型转换为字符串 // 1.基本类型的值+"" String str1 = 23 + ""; System.out.println("str1:"+str1); // 23 // 2.包装类的静态方法toString(参数) String str2 = Integer.toString(3); System.out.println("str2:"+str2); // 3 // 3.String类的静态方法valueOf(参数) String str3 = String.valueOf(23); System.out.println("str3:"+str3); // 23
2.String类型转换为基本类型
除了Charater类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
如:public static byte parseByte(String s) :将字符串参数转换为对应的基本类型。
//字符串转换为基本类型 int num1 = Integer.valueOf("222"); float num2 = Float.valueOf("22.3");