1.1 基本数据类型
八个基本类型 / 位数
- boolean / 1
- byte / 8
- char / 16
- short / 16
- int / 32
- float / 32
- long / 64
- double / 64
1.2 包装类型
基本类型都有对应的包装类型,基本类型与其对应的包装类型之间的赋值使用自动装箱与拆箱完成,
Integer x = 1; // 装箱
int y = x; // 拆箱
1.3 == 与 equals
"=="比较基本数据类型时比较的是表面值内容,而比较两个对象时比较的是两个对象的内存地址值
equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,同 ==, 则比较的是引用类型的变量所指向的对象的地址;
如果重写了,如String等类,比较的是所指向的对象的内容。
1.4 valueOf 的缓存池
valueOf 在 Java 8 的源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
创建包装类型时,如果在缓存池的范围内,将使用缓存池中的对象,不在则new一个新对象。
基本类型对应的缓冲池如下:
- boolean: true 和 false
- short和int : -128 ~ 127
- char: \u0000 ~ \u007F
- 所有 byte 值
Integer x1 = 123;
Integer x2 = Integer.valueOf(123);
Integer x3 = new Integer(123);
Integer y1 = 456;
Integer y2 = Integer.valueOf(456);
Integer y3 = new Integer(456);
System.out.println(x1 == x2);//true, 在缓存池中
System.out.println(x2 == x3);//false, new了一个新对象
System.out.println(y1 == y2);//false, 456不在缓存池中,新建对象
System.out.println(y2 == y3);//false, 两个新建对象不同
1.5 类型转换
1 自动类型转换
基本类型之间可以进行混合运算。 在运算过程中,会自动转换为同一类型,然后才进行运算。
自动类型转换遵循低级别到高级的转换的规则。
byte -> short -⬇
-> int -> long -> float -> double
char -⬆
自动类型转换发生的情况
- 运算
- 变量赋值
- 方法调用时的参数
2 强制类型转换
语法格式
(数据类型)(表达式)
long num = 900;
short snum = (short)num;
可能会数据丢失、不完整。