Java-基础篇-数据类型-类型转换

类型转换

—自动类型转换

       自动类型转换又称为隐式转换,不需要源代码中的任何特殊语法,一般只允许发生在从小的值范围到大的值范围的类型的转换,转换后的数值大小不受影响。例如:

int i1 = 123;
double d1;
d1 = i1;		//从int到double的隐式转换

       在某些情况下,隐式转换可能会降低精度,例如:从long到float的转换。

Java隐式转换示意图(m表示可能会降低精度):

m
m
m
byte
short
int
char
long
float
double

Java隐式转换表:

转换源转换目标转换源转换目标
byteshort、int、long、float、double、intlong、float、double
shortint、long、float、doublelongfloat、double
charint、long、float、doublefloatdouble
  • 不存在到char类型的隐式转换
—强制类型转换

       强制类型转换又称为显式转换,使用(target-type)value将表达式强制转换为所需的数据类型。例如,在下面的代码段中,语句“int i1 = (int)d1;”将d1的值显式转换为整数,然后将该值赋给i1。

float f2 = 22.5;			//编译错误:浮点型常量22.5默认为double类型,不存在从double到float的自动转换
float f2 = (float)22.5;		//从double到float的强制转换
float f1 = 22.5f;			//加后缀f,则常量22.5f为float类型
double d1 = 22.5;			//声明双精度变量d1并赋值
int i1 = (int)d1;			//从double到int的强制转换

       显式转换可能会导致精度损失,也可能由于溢出而导致转换结果不正确。例如:

byte b1 = (byte)12.3;			//结果:12,精度损失
byte b2 = (byte)128;			//结果:-128,由于溢出从而导致转换结果不正确

Java显式转换如表所示:

转换源转换目标转换源转换目标
shortbyte、charlongbyte、short、char、int
charbyte、shortfloatbyte、short、char、int、long
intbyte、short、chardoublebyte、short、char、int、long、float

显式转换示例:

public static void main(String[] args) {
        double d1 = 225;            	//声明双精度变量d1并赋值
        double d2 = Math.sqrt(d1);      //求225的平方根
        int i1 = (int)d2;         	  //双精度变量d2的值显式转换为整型
	    short s1 = 65;         	 //声明short类型变量s1并赋值
        char c1 = (char)s1;    	 //short类型变量s1的值显式转换为char类型
        System.out.printf("d1 = %f,d2 = %f,i1 = %d,s1 = %d,c1 = %s\n",d1,d2,i1,s1,c1);
        //float f0 = 127.45;       	 //错误:129.45默认为double,不能自动转换为float
        float f1 = 127.45f;       	  //声明单精度变量f1并赋值
        float f2 = (float)129.45;       //声明单精度变量f1并赋值:从double到float的强制转换
        byte b1 = (byte)f1;             //从float到byte的强制转换。注:精度丢失
        byte b2 = (byte)f2;             //从float到byte的强制转换。注:转换结果不正确(溢出)
        System.out.printf("f1 = %f,f2 = %f,b1 = %d,b2 = %d",f1,f2,b1,b2);
    }

运行结果如下所示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值