隐含强制类型转换——从变量说起

         隐含强制类型转换:顾名思义,看不见的强制类型转换,关于这个问题,我们先来读懂一句话:

         byte b =3;

         我们知道一个整数的默认类型int类型,没错3是int类型,当把3赋值给b的时候,其实默认有一个强制类型转换,编译器判断3在byte类型的范围之内,强制把3转换成了byte类型,然后赋值给了b。所以这就被称作隐含强制类型转换,下面我们来看一个简单的问题:

                                                                                                                           

       

         如图:上面两段代码的目的是一样的,要把10赋值给byte类型的b,但是结果是图一正确运行,图二报错。为什么呢?

         图一:b=3+7;等号右边的是常量,编译器先计算表达式的结果为10,判断10在byte类型的范围之内,于是就把int类型的值强制转换成byte类型赋给b;

         图二:b=b1+b2; 等号右边是两个变量,但是变量的值是不确定的。编译器无法判断是否超出了byte类型的取值范围,没办法进行强制类型转换,所以出现如图所示的提示:从int转换到byte可能会有损失(如果超出范围,会丢失高位)。

        知道原因之后,我们尝试把byte改成short类型结果也是一样的:

      

     但是我们改成int类型;

   

   输出结果10,是能够运行的,因为int是默认类型,所以不存在隐含强制类型转换的问题,所以编译当然不会报错。

   那么问题又来了:
        short b=3;              与               short b=3; 
        b+=2;                                         b=b+2;

      的区别:

      b+=2是可以编译成功的。+=也是一个赋值运算符,在底层是一个动作并且有一个强制转换的一个过程(不用我们自己强转);

      但是b=b+2;不能编译成功,这是两个动作,先求和再赋值,求和时b自动类型提升,求和结果是int类型,但是因为编译器无法判断数值大小,所以无法为我们强制转换类型,所以编译报错:

    

     虽然我们可以自己写强制转换,但是可能的结果编译器已经告知,可能会丢失精度。

     即   b=(short)(b+2);  总结,如果等号左右两边的类型不匹配:

    (1)如果右边是常量,编译器会判断数值大小是否在范围内,如果在就做强制类型转换,不在就报错;

    (2)如果右边是变量,编译器无法判断数值大小,不会做强制类型转换,会报错(可以自己强制转换);

    (3)+=,-=,*=,/=,%=赋值运算符不管是否在范围内都会做强制类型转换。

    (*^__^*) ——END

隐含强制类型转换是指在表达式中,当不同数据类型的操作数共同参与运算时,系统会自动将其中一个操作数的数据类型转换为另一个操作数的数据类型。这种转换是隐式进行的,不需要我们进行显式的转换操作。隐含强制类型转换遵循以下规律: 1. 当一个操作数为整型,另一个操作数为浮点型时,系统会将整型转换为浮点型。 2. 当一个操作数为长整型,另一个操作数为浮点型时,系统会将长整型转换为浮点型。 3. 当一个操作数为字符型,另一个操作数为整型或浮点型时,系统会将字符型转换为整型或浮点型。 4. 当一个操作数为布尔型,另一个操作数为整型或浮点型时,系统会将布尔型转换为整型或浮点型。 5. 当一个操作数为字符型或整型,另一个操作数为长整型时,系统会将字符型或整型转换为长整型。 需要注意的是,隐含强制类型转换可能会造成数据精度的损失或溢出,因此在进行计算时需要谨慎处理数据类型的转换。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [13从零开始学Java之数据类型之间的自动、强制与隐含强制类型转换详解](https://blog.csdn.net/syc000666/article/details/129788638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值