踩坑java基本数据转换

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

踩坑java基本数据转换

说实话,基本数据类型转换工作中用到不多,but在面试中经常会有此类的问题,而且,经常会出现一些有毒的题目,当然,也有可能是因为之前我太simple,才会被套路

java中数据转换基本逻辑

  1. java中整型的默认类型是int,浮点型的默认值就double

如果申明一个long类型,需要加L或l,如long i =1L;
如果申明一个flaot类型时,需要加f或F,如flaot=1.2F

2 . 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!


在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值