关于强制数据类型转换的问题

来源:4-1 数据类型转换的基本概念

慕无忌3584439

2019-12-28 20:44:17

/*在定义byte、char、short类型变量赋值时,为什不需要进行强制类型转换?赋值时应该默认为int整型,而int
类型的取值范围是比以上三种类型大的。而事实是只有当赋的值超过了该数据类型的取值范围时才需要进行强制
类型转换(此时强制转换会造成数据溢出)*/
   byte a=127;//成功
   byte b=128;//错误
   byte c=(byte)128;//成功
/*此时得出的结论应该是只有当赋的值超过该变量数据类型的取值范围时才进行强制数据类型转换。但为什
  么在给int类型变量赋long类型值的时候,不管该值有没有超过int范围,都必须进行强制类型转换,因为
  long的取值范围大于int,这却又符合老师说的结论。*/
    int d=100L;//错误;100并没有超过int的取值范围(+-20多亿)
    int e=(int)100L;//成功
 /*从以上做的实验来看,是不是当给byte、char、short数据类型变量赋值时,如果赋的值没有超过该数据
   类型的取值范围,那么该值默认就是该数据类型,而不是整型;当超过了默认才是整型,所以需要进行
   强制类型转换。初学编程,问的问题比较小白,但还时希望老师解答!谢谢!


写回答

1回答

好帮手慕小尤

2019-12-29

同学你好,同学理解是正确。当超过了默认范围则需要强制转换。请看下面的代码:

http://img.mukewang.com/climg/5e08097409c482bf02290107.jpg

  1. 第一个赋值没有报错  是定义的是short类型  值域范围是-2的15次方~2的15次方-1 , 122在这个范围内,所以编译通过。

  2. 第二个定义的in是一个int类型,当你给in赋值为2的时候,这个2属于int类型,当你使用in赋值给short类型的s1的时候,编译器只认识2是一个int数据类型,将一个大数据类型装进小的数据类型,会发生溢出,虽然2也符合-128~127,但是此时2属于int类型,所以此时也需要强制转换(short sl = (short)in;)。

综上所述:当超过了默认范围则需要强制转换。当建立在变量与变量之间的赋值,也需要强制转换。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0

0 学习 · 11489 问题

查看课程