A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 帕格尼尼的眼泪 中级黑马   /  2013-7-23 22:58  /  1394 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int  a=1;
int  b=2;
short sum=a+b;
编译会出现报错,出现类型转换上的问题

short  sum=1+2;
为什么这样就不会报错?
1和2 不也是整型吗
现在的1和2是不是默认是short类型了???

7 个回复

倒序浏览
老师讲ab两个操作数都为int,所以结果sum也是int型。
但是short类型在内存中占用的字节数小于int类型的字节数,int转换为short可能丢失精度,所以int类型不能自动(隐式)转换为short类型。如果要转换则需要强制转换。
回复 使用道具 举报
看了你的问题后我也产生了一个疑问,有点长,我单独发个帖问好了。
回复 使用道具 举报
因为short类型在内存中占用的字节数小于int类型的字节数,由多字节向少可以自动转换。由小向多就必须强制转换了。
回复 使用道具 举报
short类型的范围是-32,768 到 32,767,例如:定义个 short 类型的变量:short x = 32767;
在上式中,整数 32767 是int型,它从 int 隐式转换为 short。
但是如果整数的长度超过了 short 存储位置的大小,则将产生编译错误,比如short x = 32768;
所以楼主说的short  sum=1+2;可以看做short  sum=3;3没有超过范围,没有丢失精度,即int型3隐式转换为 short 3。
另外,如果定义了int a=1,b=2 ,short  sum=a+b;编译器则认为不能发生隐式转换。
回复 使用道具 举报
黑骏马 发表于 2013-7-24 00:52
老师讲ab两个操作数都为int,所以结果sum也是int型。
但是short类型在内存中占用的字节数小于int类型的字节 ...

那么short sum=1+2 ,也就是short sum=3;这不就是int隐式转换成short吗
回复 使用道具 举报
帕格尼尼的眼泪 发表于 2013-7-24 18:29
那么short sum=1+2 ,也就是short sum=3;这不就是int隐式转换成short吗

定义int a=1,b=2; 这时sum=a+b,sum也是int类型,所以不能转换为short型,所以short sum=a+b;会报错。
直接定义short sum=3; 这时的sum是short类型,不存在类型转换。
回复 使用道具 举报
            int a = 1;
            int b = 2;
            short sum = (short)(a + b);
            //short类型比int类型范围要更小,所以你可以在这里加上一个强制转换
            short sum2 = 1 + 2;
            //此时的sum2已经是short类型了,如同:
            short sum3 = 3;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马