Java自动和强制类型转换

本文详细介绍了Java中的数据类型转换,包括自动类型转换、强制类型转换以及类型提升的概念和规则。自动转换允许从小数据类型到大数据类型的赋值,而强制转换需要显式指定,可能造成精度丢失。类型提升在运算中自动提升较小数据类型至较大类型,如byte、short、char提升至int。在使用过程中需要注意精度和溢出问题,尤其是在整数运算和浮点运算中。
摘要由CSDN通过智能技术生成

Java自动和强制类型转换

自动类型转换

可以直接将一个小的数据类型直接赋值给大的数据类型。(自动类型转换)

        int a=100,b;
        byte c=100,d;
        b=c;//自动类型转换,小的数据类型可以直接赋值给大的数据类型
//      d=a;//报错,一个大的数据类型直接赋值给小的数据类型,不能直接转换

强制类型转换

不能(直接)把一个大的数据类型直接赋值给小的数据类型 。比如int32位,byte8位。byte存不下32位,最大只能存8位,所以它只能截取8位存下,把int的剩余的部分丢弃。导致最终的数据不一致。就好比大桶水往小桶里面倒,小桶装不下,水会溢出一部分。但是可以间接的转换,即强制类型转换。但是存在精度丢失或溢出的问题,所以使用时要格外注意。

      int a=100,b=400;
        byte c,d,e;
//      c=a; //报错,一个大的数据类型直接赋值给小的数据类型,不能直接转换
        d=(byte)a;
        e=(byte)b;
        System.out.println(d);//100,精度未丢失
        System.out.println(e);//-112,强制类型转换造成精度丢失。

自动类型提升

当一个算术表达式中包含多个基本数据类型(boolean除外)的值时,整个算术表达式的数据类型将在数据运算时出现类型自动提升。所有的byte、short、char类型被自动提升到int类型整个表达式的最终结果的类型被提升到表达式中类型最高的类型

浮点类型默认是double类型,后缀带f的才是float类型。

// float f = 1.1;//报错,默认是double类型,不能向下转型。
float f = 1.1f;//1.1f 字⾯量才是 float 类型。 
//float e=f+1.1;//报错,1.1默认是double类型,f是float类型。
//最终结果的类型被提升到表达式中类型最高的类型,即double类型,double类型不能自动向下转型为float

整数类型默认是int类型,没有声明(运算)的整数类型都是int类型。声明了则为声明的数据类型。运算中所有的byte、short、char类型被自动提升到int类型

short s1 = 1,s2=2;
//short s3=s1+s2; //报错,s1+s2自动提升为int类型,int类型不能自动向下转型为short

但是使⽤ += 或者 ++ 等等运算符,会执⾏隐式强制类型转换。

s1 += 1;
s1++;
//上⾯的语句相当于 s1 = (short) (s1 + 1);隐式强制类型转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值