一:基本类型
1.1 内存占用与范围
关于数据范围能记住byte为-128 - 127足矣,这是一个十分特殊的数据范围
名称 | byte | short | int | long | float | double | boolean | char |
---|---|---|---|---|---|---|---|---|
占用内存 | 1 | 2 | 4 | 8 | 4 | 8 | 1 | 2 |
数据范围 | -128 - 127 | 32767 - -32768 | -2147483648 - 2147483647 | -9223372036854775808 - 9223372036854775807 | 1.4E-45 - 3.4028235E38 | 4.9E-324 - 1.7976931348623157E308 |
1.2 数据定义
- byte、short、int、long为整数型数据,
默认数据类型为int
,创建long类型数据需要在后面加L
- float、double为浮点型数据,float单精度、double双精度,
默认数据类型为double
,创建float数据需要在后面加f/F
- char类型必须严格区分String,char是
单引号
- boolean只有两个值,true与false
- 二进制数据表示前缀0b/0B、八进制前缀0、十六进制前缀0X/0x,数据之间可以使用_隔开
1.3 自动转换顺序
关于数据类型转换八种基本类型支持从小到大的转换行为,即byte --> short --> int --> long --> float --> double
,当然这是自动转换
的顺序。强制转换则没有限制,请注意每个类型数据范围,避免精度丢失
二:包装类
2.1 对应关系表
基本类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Charecter |
boolean | Boolean |
2.2 栈上分配范围
Integer栈上缓存是平时遇到比较多且面试管比较青睐的问题,那么其它七中包装类进行了栈上缓存么?缓存的数据值在多少范围,如下表所示:
类型 | 范围 |
---|---|
Byte、Short、Integer | -128 - 127 |
Charecter | 0 - 127 |
2.3 栈上分配比较
接下来根据Integer进行描述,其余数据类型规则一致。==比较就是对内存地址比较,搞清楚栈空间地址与堆空间地址就很好区别
true
true
true
false
false
false
1
int与int比较,直接比较字面量相等与否
2
非new实例化Integer与Integer比较,栈上分配内存相等则相等
3
new实例化Integer与Integer比较,一定不相等
4
int与Integer不管是哪种形式最后都是比较字面量,可以理解为自动拆装箱
5
Integer字面量与new实例化比较一定不相等