关于Java基本数据类型那些小细节(变量声明、赋值等)
前提:了解基本类型 https://www.runoob.com/java/java-basic-datatypes.html
一、变量声明
- 整数型默认int
- 浮点型默认double
1、声明float类型
float f11 = 1; //赋值整数不会报错,可加f可不加,会自动转换成带精度的数
// float f12 = 1.0; //赋值小数会报错,要加上f后缀
float f13 = 1.0f
注意:当进行两个数(整数/浮点数)进行比较,float类型的变量值带f后缀时,有两种情况。(这个细节很容易忽视,就好比字符串比较时,经常会习惯性用==操作符)
(一)被比较的数为带精度的整数,例:1.0等。
此时,被比较数不需要加f后缀,也能正确得到比较结果。如下图所示:
(二)被比较的数为纯小数,例:1.8等。
此时,被比较数需要加f后缀,才能正确得到比较结果。如下图所示:
被比较数不加f后缀时:
被比较数加f后缀时:
2、声明double类型
// 声明double类型时,可加d后缀可不加,会自动转换为带精度的数
double d11 = 1;
double d12 = 1.0;
double d13 = 1.0d;
注意:当进行两个数(整数/浮点数)进行比较时,与纯小数比较时,也有两种情况。(这个情况主要还是和精度有关,一般不容易犯错,但也要注意)
(一)被比较的数为不带后缀的纯小数,例:1.8等
因为浮点数默认double,不带后缀的纯小数都默认转换为double了,所以能得到正确的比较结果。如下图所示:
(二)被比较的数为带后缀f的纯小数,例:1.8f等
因为double比float精度高,所以不能得到正确的比较结果。如下图所示:
3、声明long类型
// 声明long类型
// long l11 = 444444444444444; //报错,要加上l后缀
long l12 = 444444444444444l;
4、局部变量声明时没有初始化就使用,会报错(有点跳戏了,不过和变量声明还是有一丝丝关系啦~~~)
int a;
int b = 0;
int c = 0, d = 0;
// System.out.println(a); //未初始化就使用会报错(局部变量)
System.out.println(b); //初始化使用不会报错(局部变量)
二、类型转换与赋值
- 向上自动转换
- 向下强制转换
备注: byte的类型的范围是 -128 ~ 127 ( -2^(8-1) ~ 2^(8-1) -1 )
1、赋值问题
举例:byte赋值
//直接赋值超出范围报错,如下
// byte exampleB1 = 128;