文章目录
一、Java中的基本数据类型
Java中共有8种数据类型,分为三大类。
字符型:char
布尔型:boolean
数值型:1. 整型:byte、short、int、long;2. 浮点型:float、double
String不是基本数据类型,是引用类型。
关注点1:基本类型默认值0
从表中可以看到基本数据类型的起始默认值都是0
,但是每个之间都有区别。例如,char
默认值是单引号'\u0000'
表示NUL
(空的不可见字符),其码值是0
。
boolean
类型的默认值是false
,在JVM
中仍然使用ICONST_0
字节码指令赋值,即常数0
。
boolean b = false;
1: iconst_0
2: istore_1
关注点2:开发的时候注意数据溢出问题
数据溢出的时候并不会报错,也没有任何提示。
int i = 2147483647;
int j = 1;
System.out.println(i + j);
运行结果:-2147483648
因此需要开发人员在同类型数据运算时,注意数据溢出的问题,并避免编写容易导致溢出的代码。
int mid = (i + j) / 2;
替换为
int mid = i + (j - i) / 2;
关注点3:不同类型不能自动拆装箱
int i = 0;
Long j = i;
int类型的包装类是Integer
,无法转化成Long
类型。
关注点4:MySQL int的取值范围(先记在这,哈哈)
记得有这样一道面试题:如果采用自增int作为主键,主键不够用怎么办。很多小伙伴可能会答换成更大的类型long。无符号int类型作为主键,有着很大的取值范围,如果表的记录无需到达int取值上限,就需要考虑分表了。
二、浮点类型
关注点1:原码、反码、补码、移码
对于正数,原码、反码、补码相同,均为正数本身。
对于负数:原码的符号位是1。反码符号位为1,其他位为原码取反。补码为反码末尾加1。
原码的出现是为了引入负数。
原码:1111 1111 ~ 0111 1111
真值范围:-127 ~127(255个)
其中1000 0000和0000 0000都表示0
原码存在带符号位运算的问题。