Java基础知识 - 数据类型

160 阅读1分钟

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 -⬆ 

自动类型转换发生的情况

  1. 运算
  2. 变量赋值
  3. 方法调用时的参数

2 强制类型转换

语法格式

(数据类型)(表达式)
long num = 900;
short snum = (short)num;

可能会数据丢失、不完整。