Java 数据类型转换

本文详细介绍了自动类型转换的原理与应用,包括不同数据类型间的转换规则及潜在的精度损失情况。此外,还深入探讨了强制类型转换及其可能带来的问题,并提供了具体的示例说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动类型转换

自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。

int i=3;

double d=i;

float f=i;

double d2=f;


在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。


      boolean  8bit/1byte
      byte      8bit/1byte
      char      16bit/2byte
      short     16bit/2byte
  float      32bit/4byte
      int        32bit/4byte
      long      64bit/8byte
      double  64bit/8byte

特例

可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表示范围

short b=12;//合法

short b=1234567;//非法

强制类型转换

强制类型转换又被称为造型,用于显示的转换一个数值的类型,在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。

double x=3.14;

int a1=(int)x;

print输出:3

当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,无意义的值

int x2=-100;

char a2=(char)x2;

print输出:?

表达式中的类型提升问题

int a=4;

long b=5;

int c=a+b;//这时a+b的值是long类型

int c=(int)(a+b);

所有的二元运算符(+-*/%)都会有类型提升的问题!超类型时需要强制转型。

long类型强转使用大写L并且运算时尽量写在第一个值的后面例如:long times=70L*60*24*365*70;//会先提升数据类型

int money=1000000000;//10亿

int years=20;

long total=(long)(money*years);//错误。因为money*years已经运算完,在提成long输出的结果和没有long的数值是一样的

long total=(long)money*years;//正确。先提升后计算


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_Pmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值