1.为什么我们需要包装类?
因为Java是面向对象编程的,那么我们想让基本数据类型可以有对象的特征,调用一些方法,那么Java就提供了包装类,实现基本数据类型转换成包装类,进而使得基本数据类型有了类的特点,可以调用类中的方法。
2. 包装类都有哪些呢?
话不多说,直接上图
3.装箱与拆箱
在我们正式使用包装类之前,我们先了解一下什么是装箱与拆箱。
- 装箱:将基本数据类型包装成对应的包装类,比如 int->Integer
- 拆箱:将包装类拆解成对应的基本数据类型,比如 Character->char
4. 基本类型、包装类与String之间的转换
现在我们先看看基本类型、包装类与String之间的转换,然后依次代码测试这些转换
5.代码测试
我们以上图的序号依次测试这些转换方式,1->2->3->4->5->6
/**
* @Program: JavaSE
* @ClassName: TestMain
* @Author: Mr.BitHachi
* @CreateTime: 2020-07-31 20:12
* @Version: V1.0
* @Description: 测试基本数据类型、包装类与String之间的转换
**/
public class TestMain {
public static void main(String[] args) {
/************ 1:基本数据类型->包装类 ************/
System.out.println("------- 1 -------");
int i1=100;
Integer t1=new Integer(i1);//通过构造器
Float f1=new Float("32.1F");//通过字符串参数
Character ch1='A';//自动装箱
System.out.println(t1+","+f1+",ch1");
/************ 2.包装类->基本数据类型 ************/
System.out.println("------- 2 ------");
int i2=t1.intValue();//调用包装类的方法
char ch2=ch1;//自动拆箱
System.out.println(i2+","+ch2);
/************ 3.String类->基本数据类型 ************/
System.out.println("------- 3 ----------");
String s3="123";
int i3=Integer.parseInt(s3);//调用相应的包装类的parseXxx(String)静态方法
boolean b3=new Boolean("true");//通过包装类的构造器
System.out.println(i3+","+b3);
/************ 4. 基本数据类型->String类 ************/
System.out.println("------- 4 ----------");
String s4=String.valueOf(3.4F);//String的valueOf(x);
String d4=5.2D+3.4d+"";//String + 自动转换
System.out.println(s4+","+d4);
/************ 5.String类->包装类 ************/
System.out.println("------- 5 ----------");
String s5="142.35D";
Double d5=new Double (s5);//通过字符串参数
System.out.println(s5);
/************ 6.包装类->String类 ************/
System.out.println("------- 6 ----------");
Float f6=123.456f;
String s6=f6.toString();//对应包装类对象的toString()方法
String sf=Float.toString(f6);//调用对应包装类的toString(x)方法
System.out.println(s6+","+sf);
}
}
运行结果:
------- 1 -------
100,32.1,ch1
------- 2 ------
100,A
------- 3 ----------
123,true
------- 4 ----------
3.4,8.6
------- 5 ----------
142.35D
------- 6 ----------
123.456,123.456
6.面试题
public class FaceTest {
public static void main(String[] args) {
/************ 1 ************/
//比较情况下,编译时将Integer统一编译成Double,与位数多的单位保持一致
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);//1.0
/************ 2 ************/
//这里没有比较,只有条件判断
Object o2;
if (true)
o2 = new Integer(1);
else
o2 = new Double(2.0);
System.out.println(o2);//1
/************ 3 ************/
//Integer内部定义了IntegerCache类结构,IntegerCache中定义了 Integer[],
//保存了从-128~127范围的整数。如果我们使用自动装箱的方式,给Integer赋值的范围在
//- 128~127范围内时,可以直接使用数组中的元素,不用再去new了.目的:提高效率
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j);//false
Integer m = 1;
Integer n = 1;
System.out.println(m == n);//true
Integer x = 128;
Integer y = 128;
System.out.println(x == y);//false
}
}
运行结果:
1.0
1
false
true
false