[关闭]
@JeromeLiee 2020-02-09T15:32:28.000000Z 字数 1121 阅读 388

Java数据类型


1. 基本类型

局部变量在栈内存中创建,效率更高。分为3种:字符类型、布尔类型和数值类型,具体如下

PS:浮点数的具体表示原理,还需要再深入分析

2. 包装类型

Java是面向对象的语言,所以需要对这8种基本类型进行包装,对应8种包装类型。

2.1 自动拆装箱

  1. Integer a = 10;
  2. int b = a;
  3. // 其中Integer a = 10 是装箱过程,等同于
  4. Integer a = Integer.valueOf(10);
  5. // 其中int b = a 是拆箱过程,等同于
  6. int b = a.intValue();

2.2 缓存池

所有的整型数据包装类型及字符包装类型都有缓存池,其范围分别如下:

使用 = 符号在进行包装类型的比较时,如果其值在缓存池范围内,则比较的是 xxxValue() 值,否则比较的是对象的地址值

  1. Integer a = 127;
  2. Integer b = 127;
  3. System.out.println(a == b); // 输出结果为true,因为127在缓存池的范围,所以比较的是包装类型对应的基本类型值
  4. Integer a = 128;
  5. Integer b = 128;
  6. System.out.println(a == b); // 输出结果为false,因为128不在缓存池范围,则比较的是Integer对象的地址值。

3. 引申

由于整数类型是有范围的,在计算两数的平均数时,需要避免直接相加可能带来的整数溢出问题,解决办法如下:

  1. // 原始写法
  2. int mid = (low + high) / 2;
  3. // 可改进为:
  4. int mid = low + (high - low) / 2;
  5. // 进一步可改为位运算,计算机底层的计算实现
  6. int mid = low + ((high - low) >> 1);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注