JAVA是否存在自动强制类型转换?

我们都知道类型转换有两种,一种是自动类型转换,由低字节转向高字节(long型转向float型除外,由于浮点型存储方式的原因,四字节的float型能够表示的取值范围会远远大于八字节的long型),一种就是强制类型转换,需要我们手动转换,例如int a = (int)3.14,结果是整数3。在我们开始之前,我们先来确定一下程序中的整数的默认类型是不是int型,如图程序

74ff44eb0fd44befabbe9b25304f762b.jpg

3e63e4c8a7354a51bfd7bd85891a4d3e.jpg 

da3b34537ce24d028e86686a39cee70e.jpg 

9db620f47bab4b7e9dccc90818534d06.jpg 

可以看出整数超过int型的最大值是会报错的,加上L后是不会的,可以得出int型确实是整数的默认类型,而且可以知道加上L相当于向long型的转换,再赋值给int型就要强制转换了。

既然我们得出了int型是整数的默认类型对于下面的程序我们就有疑问了

ace488dcf97b4d10b9c6b9475d3ce1a4.jpg 

51e9b13dbc8f407291d1455b659ed60e.jpg

按理来说,既然整数都是int型,把数赋值给byte型变量a和short型变量b应该会报错的,但是结果并没有。可以猜测是不是存在自动强制类型转换,但是这种转换是在数据值满足在较小类型的取值范围之内可以允许的,就是将1赋值给byte型,哪怕1默认是int型,但是转换后大小并没有影响,而大于较小类型最大值的数并不会这样,依然是默认的int型

c7c13cb2cb8b4aa2a7bd13f4c926910f.jpg 5854d566da3a4bf8bf63758e9f03b944.jpg

 可以看到这里的128是大于byte型最大值的,依然还是默认为int型。不过这种转换的允许只会出现在数字字面量上,也就是上面的1,10,127这样的数字,对于如果你把1赋值给int型变量a,在把a赋值给byte型变量,依然需要手动的强制转换。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值