@JeromeLiee
2020-02-09T23:32:28.000000Z
字数 1121
阅读 452
局部变量在栈内存中创建,效率更高。分为3种:字符类型、布尔类型和数值类型,具体如下
PS:浮点数的具体表示原理,还需要再深入分析
Java是面向对象的语言,所以需要对这8种基本类型进行包装,对应8种包装类型。
Integer a = 10;
int b = a;
// 其中Integer a = 10 是装箱过程,等同于
Integer a = Integer.valueOf(10);
// 其中int b = a 是拆箱过程,等同于
int b = a.intValue();
所有的整型数据包装类型及字符包装类型都有缓存池,其范围分别如下:
使用 =
符号在进行包装类型的比较时,如果其值在缓存池范围内,则比较的是 xxxValue()
值,否则比较的是对象的地址值
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // 输出结果为true,因为127在缓存池的范围,所以比较的是包装类型对应的基本类型值
Integer a = 128;
Integer b = 128;
System.out.println(a == b); // 输出结果为false,因为128不在缓存池范围,则比较的是Integer对象的地址值。
由于整数类型是有范围的,在计算两数的平均数时,需要避免直接相加可能带来的整数溢出问题,解决办法如下:
// 原始写法
int mid = (low + high) / 2;
// 可改进为:
int mid = low + (high - low) / 2;
// 进一步可改为位运算,计算机底层的计算实现
int mid = low + ((high - low) >> 1);