文章出处:Java基础之基本数据类型 关注码农爱刷题,看更多技术文章!
【基本内容】
Java数据类型分为基本数据类型和引用数据类型,其中基本数据类型分为八种:六种数字类型,一种字符类型和一种布尔类型。八种基本数据类型相关属性如下图:
此外,Java语言支持一些特殊的转义字符序列,如下图:
【注意事项】
1. 基本数据类型的转换:八种基本数据类型可以混合运算;混合运算时,较小的类型会自动转化提升为同较大的类型,也即从低级向高级转换:byte、short、char(三者同级)—> int —> long —> float —> double,然后进行运算,以保证运算的一致性和安全性;而有的时候,需要逆向强制类型转换,所以在转换过程中要注意以下几点:
a. 逆向转换可能导致溢出或精度损失,例如整型(int a = 128;)转换为byte类型,因为byte类型的最大值为127,这时强制类型转换,可能得到你意想不到的结果,参看下列代码:
int a = 128;
byte b = (byte) a;
System.out.println(b); //输出结果是-128,是你想到的答案吗?
b. char转换为int数值进行混合运算,转换后的int值是字符对应的ASCII码表值,这也是要注意的,参看下列代码:
char c = 'A'; //ASCII值为65
int b = c + 1;
System.out.println(b); //结果是66,因为char自动转换为int
char d = (char)(c +1);
System.out.println(d); //输出字符B
2. 浮点数精度导致的问题:因为二进制无法精确表示浮点数,浮点数比较大小或运算,可能结果也会让你大跌眼镜,例如double d = 1.3 和 float f = 1.3f两者值直接用==比较一定相等吗?参看下列代码:
double d = 1.3;
float f = 1.3f;
System.out.println(d == f); //结果是false
答案是不等的,因为float变量 f 转换为double类型后和直接赋值的变量 d 精度不一样。因为精度的问题,即使同精度类型的浮点数直接进行加减乘除运算,结果都可能让你意外。参看下列代码:
double d1 = 0.001;
double d2 = 1.1;
System.out.println(d2 - d1); // 结果是1.0990000000000002
以上问题解决的方法是:建议先转换为BigDecimal类型后再进行运算或比较大小。
3. 其他注意点:整数的默认类型是int,小数默认类型是double,所以在定义long类型时必须在数字后面跟上l,而定义float时必须在数字后面跟上F或f,例如下列代码:
float f = 3.4;
float ff = 3.4 * 2; //编译不能通过
// 正确的写法
float f = 3.4f;
float ff = (float) (3.4 * 2);