日期:2014-05-20  浏览次数:20755 次

新手求教一个类型转换的问题
本帖最后由 rockpk008 于 2012-11-27 02:16:09 编辑 最近看到一道题:本来解答的很简单,但是又貌似有很多的不清楚
short s=1;
s=s+1;

问题1:为什么一个整型字面量可以直接赋值给s而不需要进行类型转换?

问题2:s+1并未超出s可以表示的范围,为什么编译会不通过?

问题3:将s+1的过程中,s会自动提升类型,那么s还是short型么?如果s提升到int型,那么s=s+1可以成立啊

请各位大大解答一下我的问题,或者只回答一下第三个问题
------最佳解决方案--------------------
问题1:为什么一个整型字面量可以直接赋值给s而不需要进行类型转换?
答:因为一个整型字面值是整形常量,编译器可以清楚的知道该值在不在short的取值范围内。

问题2:s+1并未超出s可以表示的范围,为什么编译会不通过?
答:因为s+1中,s为short类型变量,既可以是最小值,也可以是最大值。翻译器不能判断该值到底是最大值还是最小值,因为编译器是不会运行的。所以。如果该值为最大值。那么short类型+1就已经还超出short类型的范围了,所以自动转型成int了。int类型是个特例,再加虚拟机也不会认为超了。

问题3:将s+1的过程中,s会自动提升类型,那么s还是short型么?如果s提升到int型,那么s=s+1可以成立啊
答:其实问题2中已经解答。s还是short型,但是s+1不一定是short型,所以,将s+1赋值给short型的s是不合理的。
------其他解决方案--------------------
自己顶一下。
------其他解决方案--------------------
http://blog.csdn.net/qingyun1029/article/details/5938926  http://blog.csdn.net/qingyun1029/article/details/5938926
------其他解决方案--------------------
http://hi.baidu.com/lee511411973/item/cc1f5a84c88c1015c31627a6

看看这篇文章吧