关于强制类型转换和隐式转换的理解

  • 强制类型转换:又称为“显示类型转换” ,是从存储范围较大的类型转换为存储范围较小的类型,在转换过程中可能会造成数据损失。

例:常见得面试题

byte a = 300 ;
System.out.println("a="+a);

分析:byte 只占一个字节,可接收得数据范围是-128~127;300>127,明显已经超出了byte的可接收数据范围,语句会报错,

/*
常数300:0000 0000  0000 0000  0000 0001  0010 1100
byte:                                    0000 0000
*/

 如何解决:使用强制类型转换

byte a = (byte) 300;
System.out.println("a="+a);
/*
常数300:0000 0000  0000 0000  0000 0001  0010 1100
byte:                                    0000 0000
强制转换类型后只能截取到目标数据类型最大范围数
截取------------------------------------- 0010 1100
截取的数据是操作后的数据为补码,所以还要对其取原码
0010 1100 --------正数
正数:原码等于反码等于补码
*/

 注意:

/*
    注意事项:赋值运算符+= , -= , *= , /= , %=中都隐藏有强制类型转换
*/
        short a = 1;
          sum += a;       //相等于  short sum = (short)(sum+a);

隐式类型转换:又称默认类型转换,是从存储范围较小得类型转换为存储范围大的类型

 byte 、short、 char三者之间不转换,一旦参与运算,会先默认转换为 int 类型后再参与运算。

        short a = 1;
        char  str = 'a';
		byte  b = 20;

		int sum = a + str ;
		int sum2 = a + b ;
		int sum3 = b + str ;
		System.out.println("sum="+sum) ;
		System.out.println("sum2="+sum2) ;
		System.out.println("sum3="+sum3) ;

结果:

sum=98
sum2=21
sum3=117

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值