走过路过不要错过,快来看一看,瞧一瞧了,买不了吃亏买不了上当,满满干货。hhhhh~
一、变量声明
整数型默认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、局部变量声明时没有初始化就使用,会报错(有点跳戏了,不过和变量声明还是有一丝丝关系啦~~~)
inta;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;
2、强制转换数据溢出情况
举例: int转byte
int exampleB2 = 129; //129往前移两位得-127
System.out.println((byte)exampleB2); //-127
int exampleB3 = -129; //-129往前移一位得127
System.out.println((byte)exampleB3); //127
int exampleB4 = 256; //256往前移(256-127=129)位,即0
System.out.println((byte)exampleB4); //0
分析:
想象这个范围是在数轴上一直连续的区间
以中间这个区间为起始区间,当int = 129时,超出了区间(129-127 = 2)位,在对应的连续区间里的位置是第二位,第一位是-128,第二位是-127,所以此时强制转换打印的值是-127,而不是129
以中间这个区间为起始区间,当int = -129时,超出了区间(-128 - (-129) = 1)位,在对应的连续区间里的位置是第一位,数一位,第一位是127,所以此时强制转换打印的值是127,而不是129
记得点赞,么么哒~~~(づ ̄ 3 ̄)づ,爱您!