黑马程序员技术交流社区

标题: 脑残了,掉进坑里出不来了,short一个问题,求解答。 [打印本页]

作者: 冯云飞    时间: 2013-1-10 00:31
标题: 脑残了,掉进坑里出不来了,short一个问题,求解答。
本帖最后由 冯云飞 于 2013-1-10 00:46 编辑

short  c= 4

c=c+4

这个是不能编译的。 因为阿拉伯数字是4个8位

但是。。 第一个 c=4     已经定义了short,,   c 还可以正常赋值4 ???  这没问题吗??这为什么啊??为什么可以?? 这不科学啊。。。





4可以16位表示, 阿拉伯数字在运算过程中,自动提升成为系统默认的int。  所以,运算后不可赋值成short

感谢群里朋友
作者: 希望的曙光    时间: 2013-1-10 00:59
c=(short)c+4
java 编译器认为想一个“4”是一个int型,java自动类型转换是字节小的类型向字节大的类型转换,
反之必须强制类型转换,c+4 这个表达式是short类型和int类型相加,此时再用c=c+4
进行强制类型转换就报错

作者: 詹卓锋    时间: 2013-1-10 08:39
其实这个我也纠结了很久。
short是2个字节,16个二进制,int是4个字节,32个二进制。所以在定义short s=4;时,就有疑问了?4明明默认是int型的,怎么可以用short类型来定义呢?关键在于Java是强类型的语言,

6598217656796055233.jpg (20.61 KB, 下载次数: 34)

自动转换与强制类型转换

自动转换与强制类型转换

作者: 詹卓锋    时间: 2013-1-10 08:49
其实这个我也纠结了很久。
short是2个字节,16个二进制,int是4个字节,32个二进制。所以在定义short s=4;时,就有疑问了?4明明默认是int型的,怎么可以用short类型来定义呢?关键在于Java是强类型的语言,在定义的时候相当于是这样的(我的理解):short s=(short)4;就是说发生了自动的强制转换。

而s=s+5;这个会提示编译错,为什么?因为s是short型,5是int型,s+5:先把s自动的提升为int型,然后在和5相加,这样s+5的结果类型就是int,那么右边结果是int型,左边是short,你说int能赋值给short型吗,在这题是不可以的。除非以下情况可以:s=(short)(s+5);把s+5的结果强制转换成short,再赋值给右边,这样就对了。

这问题老师说没必要纠结它半个到一个小时,如果实在不懂,就去看【毕向东_Java基础视频教程第02天-11-赋值和比较运算符】,看到懂为止。不知道我的理解对不??

6598217656796055233.jpg (20.61 KB, 下载次数: 35)

自动、强制转换类型

自动、强制转换类型

作者: 黄锦成    时间: 2013-1-10 09:01
c是short类型的,与类型为int 的4相加,c会类型提升为int,导致结果是 int 类型的8,赋值给 short类型的c,会提示精度丢失,你可以强转为short类型




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