二进制 Bit

1. 字节 Byte

  • 计算机能够寻址的最小单位
  • 1 Byte = 8 Bit(二进制位)

2. 各种类型所占字节数

  • 1 Integer = 4 Byte = 32 Bit
  • 1 Short = 2 Byte
  • 1 Char = 2 Byte

3. ASCII码表

  • 最常用的字符对照表

基本数据类型

1. 原生数据类型

  • 变量存的就是数据的值
  • 没有对应类的数据类型
  • 每个原生类型都有一个对应的装箱类型,在java.lang下
    • 比如byte -> Byte,int -> Integer
  • 原生数据类型有
    • byte 1个字节
    • short/int/long 2/4/8个字节
    • float/double 4/8个字节
    • char 2个字节
    • boolean true/false,没有对应字节概念
    • void?
  • 浮点数是小数在计算机中的近似表示

2. 引用类型(对象)

  • 变量存的是数据的地址

类型转换与类型提升

1. 高精度转低精度

  • 精度丢失
  • 无法自动执行,必须强制转换
    • int i = (int)(1 + 1.0);

2. 类型提升是会自动执行得

  • 整数 + 浮点数,整数会自动被转化为浮点数
  • char完全等于对应的ascii码
    • char c = ‘1’; 完全等于 char c = 49;
    • c + 1为ascii50对应的’2’

基本数据类型对应的装箱类型

  • 装箱类型可以提供很多额外方法,方便使用、操作
  • 自动装箱:int -> Integer
  • 自动拆箱:Integer -> int
  • List这种Collection容器不接受int这类原生类型,它的内部会自动拆装箱
  • boolean只能有两种状态:true、false,Boolean还有一种null
  • 装箱类型还提供MAX_VALUE, MIN_VALUE等
  • 装箱类型的坑:
  1. Integer i = null;
  2. int a = i;
  3. // NullPointerException
  4. // 装箱类型可以为null,对null拆箱造成空指针异常

equals与‘==’约定

  • 区别:
    • ==: 比较二者是否相同(基本类型是值,对象是地址)
    • equals:比较二者是不是相等(由每个类型自己定义)
  • 坑: ```java Integer a = 1000; Integer b = 1000;

System.out.println(a == b); // false System.out.println(a.equals(b)); //true

Integer c = 1; Integer d = 1; // 为了防止产生很多零散的对象,Java内部做了一些优化,一定范围内的值会指向同个已在内存中的对象 // Python也做了类似优化 System.out.println(c == d); // true System.out.println(c.equals(d)); //true ```