Java_10_自动类型转换_强制类型转换

自动类型转换

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

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

int a=3;//int 4字节

double a1=a;//double 8字节

float a3=a;//float 4字节

double a4=a3;//double 8字节

特列:

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

例如:short b=12;//合法    short b1=1234567;//非法

 

强制类型转换(Cast)

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

强制类型转换的语法格式:“(Type)var”,运算符“()”中的Type表示将值var想要转换成的目标数据类型。

例如:double x=3.14;

int nx=(int)x;//值为3

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

例如:int c=300;

byte v=(byte)c;//值为44

运算时类型提升问题

表达式中的类型提升问题

int a=3;

long b=4;

int c=a+b;//   a+b之后变成了long类型,long类型是8个字节而int是4个字节,所以会损失精度。

做所有的二元运算符(+-/*%),都会有类型提升问题。

int d=3;

double e=3.14;

float f=(float)(d+e);// d+e后是double类型需要强制转型为float

int money=1000000000;//10亿

int years=20;

long total=money*years;//返回的是负数

long total=(long)money*years;//必须先转型,不能写成(long)(money*years)

//一个人70年心跳次数计算

long times=70L*60*24*365*70;

//强制转型“L”放在最前,以免出现,在前面相乘的时候就已经溢出的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr_Pmc

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

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

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

打赏作者

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

抵扣说明:

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

余额充值