黑马程序员技术交流社区

标题: [不懂就要问]int赋值给short 为啥不出错呢 [打印本页]

作者: 白羽蘇芳    时间: 2015-7-16 11:32
标题: [不懂就要问]int赋值给short 为啥不出错呢
本帖最后由 白羽蘇芳 于 2015-7-22 10:22 编辑
  1. class VarDemo
  2. {
  3.     public static void main(String[] args)
  4.         {
  5.         short s=1;
  6.         System.out.println(s);
  7.     }
  8. }
复制代码
1默认不是int么  占4个字节 ,赋值给就占2个字节的s  为啥编译不报错呢?


作者: masai158    时间: 2015-7-16 11:35
底层有强制类型转换,Java 编程思想这一书对这些讲解非常清楚。你试一试超出范围他能 能变异通过吗。
作者: 白羽蘇芳    时间: 2015-7-16 11:38
masai158 发表于 2015-7-16 11:35
底层有强制类型转换,Java 编程思想这一书对这些讲解非常清楚。你试一试超出范围他能 能变异通过吗。 ...

我以为类型转换只能升不能降啊   
你的意思是说虽然位数超了,但只要数的大小范围在short内,也可以int自动降到short,但是我赋个40000给short就不行了  
是这样么
作者: masai158    时间: 2015-7-16 11:42
是的。超出范围就会报错。
没有超出范围 则将 Int 强制向下转换。
作者: 18671183990    时间: 2015-7-16 23:43
1的范围在short范围内
作者: IT老鹰    时间: 2015-7-16 23:59
这个在short s=1的时候,java会判断1在short中,这个是一次运算,赋值运算。跟short s=1,s = s+1是不一样的,这里的s=s+1是两次运算,所以会出现。这个在基础视频类型转换有提过的,楼主可以再去看看。本人表达能力不好,望见谅。
作者: tao13yang    时间: 2015-7-17 00:11
short s=1;//这是一个赋值的动作,他会先判断这个值的在不在short的范围,如果在就直接赋值,这是对的。
作者: tao13yang    时间: 2015-7-17 00:21
shor s=1;
s=s+1;//这样就会报错,因为他先做运算在赋值,运算时会s会提升为int,再去加1,结果为int 在赋值给short的就溢出;
s+=1;//这样写就好了,因为他是把左右2边赋值个s,底层有一个自动转型,可以理解为s=short(s+1)

作者: _Rain    时间: 2015-7-17 01:51
常量在进行赋值的时候,虚拟机会自动判断该常量是否能被该类型变量所接收,如果能就不会报错。你可以试试给个超过short范围的常量,编译就会出错。变量的话就必须进行强转!
作者: icichacici    时间: 2015-7-17 06:21
因为是向下强制转换而来的
作者: 帅帅loyal    时间: 2015-7-17 10:31
看评论学习,,这点东西差点忘了
作者: Leaos    时间: 2015-7-17 12:31
在给变量显示赋值的时候,只要数值在数据类型的范围内就不会报错了啊
作者: 落叶随尘    时间: 2015-7-17 19:15
1在short 的范围之内  ,直接赋初值就可以。
作者: 马北剑西    时间: 2015-7-17 20:17
领教了,看来得多学底层的东西
作者: 陈建民1    时间: 2015-7-17 20:48
刚学过不久,好像是因为1是常量,而且又在short的取值范围内,JVM在编译时会进行内部强制转换。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2