踩坑java基本数据转换
说实话,基本数据类型转换工作中用到不多,but在面试中经常会有此类的问题,而且,经常会出现一些有毒的题目,当然,也有可能是因为之前我太simple,才会被套路
java中数据转换基本逻辑
- java中整型的默认类型是int,浮点型的默认值就double
如果申明一个long类型,需要加L或l,如long i =1L;
如果申明一个flaot类型时,需要加f或F,如flaot=1.2F2 . byte,short,char一起参与运算时,会默认按转为int来运算
3 .大类型转小类型需要强转 ,小类型转大类型时一般可以自适应
4 .注意在用到±*/%运算时,系统会有优化操作,但要注意可能会损失精度 毒5
毒1:
byte i = 129;
这应该算是小毒一个, java默认整形类型为int,int的取舍范围为 -128~127,上述超出范围,编译都不能通过,解决办法 改为int接收,或 byte i=(byte) 128 强转会损失精度
毒2:
int i =1;
long j =1;
int y =i+j;
同样会编译报错,接收变量一定要它们中最大的类型,要通long y来接收
毒3 :
int i =1000000000;
long j =1l*(i*1000000000);
long j2 =i*1000000000*1l;
Long j3= 1l*i*1000000000;
System.out.println(j);
System.out.println(j2);
System.out.println(t);
请问,输出j,j2,j3有什么区别 ?
结果:
-1486618624
-1486618624
1000000000000000000
j 和j2,老是先运算的是int类型的i和1000000000相乘,超出了int的值范围,就已经损失了精度;而j3,通过i和1L先进行相符,结果自动转换成long类型。
毒4 :
float i=1.2
编译会报错,因为浮点型默认是double类型,解决办法folat i=1.2f;
毒5:
这个毒我也不知怎的,在很多人博文里都有,估计有很多人都中了吧 。
short s = 1 ;
s = s+1;
s+=1;
请问上面代码有什么问题?
第2句代码,编译不通过,因为默认小类型和int一块参与运算时,最后会换算成int类型的,所以s+1的值应该又int接收,但如果一定要用short接收的话,代码要变成 s=(short)s+1;
但s+=1时,就不会出现编译不通过的情况,因为系统默认就是按照s=(short)s+1执行的。
再如 ,
byte i =120 ;
i+=15;
会发生什么?
i自增15,得135.超过了byte取值范围,但系统默认会把135强转成byte类型,会损失精度 。
End!

本文探讨了Java中基本数据类型的转换,包括整型、浮点型和字符型的转换规则,强调了转换过程中的潜在问题,如精度损失、溢出和编译错误。特别提到了int与long、float与double之间的转换细节,以及在运算中可能导致的意外结果。

被折叠的 条评论
为什么被折叠?



