写在前面:
视频是什么东西,有看文档精彩吗?
视频是什么东西,有看文档速度快吗?
视频是什么东西,有看文档效率高吗?
1. 介绍
张小飞:什么是基本类型包装类?
诸小亮:Java有 8 种基本数据类型,你是知道的吧
张小飞:这时当然的,它们是:int、short、byte、char、long、double、float、boolean
诸小亮:嗯嗯不错,不过 Java 是面向对象的语言,所以每种基本数据类型,都有对应的类
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
char | Character |
long | Long |
double | Double |
float | Float |
boolean | Boolean |
张小飞:原来是这样,不过这有什么用呢?
诸小亮:这样做的目的——定义更多的功能操作基本数据类型,以 Integer 为例:
public static void main(String[] args) throws Exception {
//创建Integer对象
Integer num = new Integer(12);//已经过时
num = Integer.valueOf(10);//目前推荐使用
System.out.println(num);
System.out.println(Integer.MAX_VALUE);//int的最大值
System.out.println(Integer.toBinaryString(num));//把数字转换为二进制字符串
}
张小飞:明白了
2. 自动装箱和拆箱
张小飞:那么工作中,是用包装类还是用基本类型呢?
诸小亮:用哪个都可以,因为它们会自动转换,比如:
public static void main(String[] args) throws Exception {
//1. 会把 100 自动转换称 Integer 对象,这叫自动装箱
Integer num = 100;
//2. 把 Integer 自动转换为 int 类型,这叫自动拆箱
int count = num;
}
张小飞:自动装箱?
诸小亮:是的,这时基本类型和包装类的一个重要特性
- 第一行,将整数值100赋给Integer类型的对象num,这是:自动装箱
- 第二行,先将Integer对象num转换为基本数据类型,然后将结果赋值给count,这是:自动拆箱
张小飞:明白了
诸小亮:另外,你猜猜下面代码输出结果是什么
public static void main(String[] args) throws Exception {
Integer num2 = new Integer(100);//虽然已过时,但是先用,主要看现象
Integer num3 = new Integer(100);
System.out.println(num2 == num3);
System.out.println(num2.equals(num3));
}
张小飞:第一个肯定是false,第二个是true,这还用猜?
诸小亮:嗯,不错,如果把代码改一改呢?
张小飞:这应该跟改之前没什么区别吧
诸小亮:有区别,这时候两个都是true
张小飞:还真是,不过,这是为什么呢?
诸小亮:为了方便, Java内置了 -128 到 127 的 Integer 对象,所以 num2 和 num3 指向的是同一块内存
张小飞:原来如此,能证明吗?
诸小亮:当然可以,通过debug就能看出来
另外,通过观察内存也可以证明它们都是内置的 Integer 对象,比如:
张小飞:明白了
3. 基本类型和字符串
诸小亮:其实,工作中常常会用到基本类型和字符串互相转换
张小飞:这应该怎么转换?
诸小亮:以 Integer 为例,它提供了 parseInt 方法,把字符串转换为数字,返回值是int类型
张小飞:如果提供的字符串不是数字呢?
诸小亮:那就会报异常,比如:
结果:
张小飞:明白
诸小亮:另外,基本类型也可以转换为字符串
public static void main(String[] args) throws Exception {
int num = 100;
//1. 使用Integer的toString方法
String numStr = Integer.toString(num);
System.out.println(numStr);
//2. 直接加上空字符串
System.out.println(num+"");
}
张小飞:原来也可以使用 toString 方法
张小飞:如果想把一个都是数字的字符串转换为 Long、Double呢?
诸小亮:转换方式跟 Integer 一样,它们都提供了类似的方法,比如: