为什么有包装类?-----对基本数据类型的补充
Java中的8种基本数据类型【不能叫做对象】
什么是对象?---堆里的一块内存空间
注意:String是类;
基本数据类型中没有操作数据的能力;类当中可以定方法,用于操作数据
1、整形:byte short int long
2、浮点型:float double
3、字符型:char
4、布尔型:boolean
Java中的3种引用类型
1、类
2、接口
3、数组
一、包装类概述
Java为每个基本数据类型提供了对应的包装类,这些类位于Java.lang包中:
二、包装类的主要用途
1、在集合中使用:集合框架如List、Set等只能存储对象,不能存储基本类型
2、提供更多操作方法:如类型转换、进制转换等
3、允许null值:基本类型不能为null,包装类可以
4、泛型支持:泛型参数必须是对象类型
三、自动装箱与拆箱(基本数据类型和包装类变换)
//自动装箱
Integer a=10;//编译器自动转换为Integer.valueOf(10);Integer是一个类,类要调用一些方法来存储数据
//自动拆箱
int b=a;//编译器自动转换为a.intValue()---变量a调用intValue方法取出10,并把10赋给b
int c=10;//基本数据类型直接定义数据
四、常用方法
(一)基本方法(所有包装类都有)
- valueOf();静态方法,返回包装类对象
- xxxValue():实例方法,返回对应的基本类型值
- parsexxx():静态方法,将字符串转换为基本类型
- toString():转换为字符串表示
(二)特殊方法
Integer/Long等数字类型:
- toBinaryString():转换为二进制字符串
- toHexString():转换为十六进制字符串
- compareTo();比较两个值
- compare():静态方法比较两个值
Character类特有方法:
- isDigit():判断是否为数字
- isLetter():判断是否为字母
- isWhitespace():判断是否为空白字符
- toUpperCase()/toLowerCase():大小写转换
Boolean类特有方法:
- logicalAnd()/logicalOr()/logicalXor():逻辑运算
五、缓存机制
Byte:缓存-128~127的所有值
Short:缓存-128~127的所有值
Integer:默认缓存-128~127
Long:缓存-128~127的所有值
Character:缓存0~127的字符
Boolean:缓存TRUE和FALSE两个实例
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true,使用缓存对象
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false,超出缓存范围,新建对象
六、经典面试题
Integer a = 100 等价于 Integer.valueOf(100);
底层valueOf方法:
理解:cache为一个长度为256的数组;
128陷阱:
为什么叫128陷阱?----因为127时值为true,128时值为false
1、基本类型数据比较值,值大小相等,为true
2、自动装箱,10<128,在内存中都是在cache数组的一块空间里,地址相等为true
3、使用new关键字,分别开辟新内存空间,地址不相等为false
4、a1为包装类,跟基本数据类型a对比时,需要拆箱,直接将数据拿出来,而此时==比较值是否相同,所以为true;
5、包装类拆箱,equals底层也是==,结果为true
6、a2新开辟了一块内存空间,与a1地址不同,结果为false;
7、a2也会自动拆箱,直接将值拿出来与a比较,结果为true;