[Java]类型转换和类型提升

类型转换

在Java中,当参与运算数据类型不一致时,就会进行数据转换

  • 类型转换主要分为两类:自动类型转换(隐式)和强制类型转换(显式)

  • 数据范围小的转为数据范围大的时将自动进行自动类型转换

自动类型转换

 int a=10;
 long b=20L;
 a=b;//大类型赋给小类型,会报错
 int a=10;
 long b=20L;
 b=a;//短赋给长不报错
 int c=10;
 float f=12.5f;
 c=f;//会报错,float能表示的数据宽度更宽
 c=(int)f;//强转小数保不了
 float f=3.14F;
 double d=5.12;
 d=f;//编译器会将f转换为double,然后进行赋值
 f=d;//double表示数据范围大,直接将float交给double会有数据丢失,不安全

强制类型转换

  • 当进行操作时,代码需要经过一定的格式处理,不能自动完成.特点:数据范围大的到数据范围小的

 int a = 10;
 long b = 100L;
 a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
 float f = 3.14F;
 double d = 5.12;
 f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
 byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
 byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显式转换,否则报错

类型提升

不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的

  • int与long之间:int会被提升为long

 int a=10;
 long b=20L;
 int c=a+b;//会报错,首先提升a为long,和b相加,在赋给短的int会报错
 long d=a+b;//正确 long+long赋给long
 byte a=10;//10在赋值时就为int,为什么赋值不报错:因为编译器会帮你检查,如果字面值的范围是在自己表示的范围内,就不会报错
 byte b=20;
 byte c=a+b;//会报错,因为a+b会先将a和b提升为int.int+int,赋给byte会报错
 byte c=(byte)(a+b);//正确

小结

  • 不同类型的数据混合运算,范围小的会提升成范围大的

  • 对于short,byte这种比4个字节小的类型,会先提升成4个字节的int,在运算

String与int互转

1.int转String

 int num = 10;
 // 方法1
 String str1 = num + ""; 
 // 方法2
 String str2 = String.valueOf(num);

2.String转int

 String str = "100";
 int num = Integer.parseInt(str);//Integer是int的包装类,理解为强化版的int,里面有很多实用的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值