关于short s=1;s+=1;问题的思考

羊城咩咩咩 2004-11-19 01:10:18
short s=1;
s=s+1;
不能通过编译
当下面的
short s=1;
s+=1;
却可以。为何?
...全文
546 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
beakham 2004-11-20
  • 打赏
  • 举报
回复
很明显
不是同一类型的
一个是short,一个是int
mengxianwei007 2004-11-20
  • 打赏
  • 举报
回复
s=s+1 ;// s+1已经转换为 int了。 short s= (int)s 当然不行。
羊城咩咩咩 2004-11-20
  • 打赏
  • 举报
回复
chanceqw(★★★★★) ( )
整型常量默认具有int类型
浮点型常量默认为double型
____________________________________

那为何short s=5;会自动转型?
而 short s=5.0;不会?
这种规定在哪里可以看到?
Hotthing 2004-11-20
  • 打赏
  • 举报
回复
真搞不懂, 在C中那么简单的问题, 在JAVA中那么复杂!
dreamchen 2004-11-20
  • 打赏
  • 举报
回复
收到,学习中。
chanceqw 2004-11-20
  • 打赏
  • 举报
回复
整型常量默认具有int类型
浮点型常量默认为double型
羊城咩咩咩 2004-11-19
  • 打赏
  • 举报
回复
short s=(short)5.0; //没问题。5.0先转型成short再赋给s;
s=(short)(s+5.0); //没问题。s向上转型成double,相加得到double类型再转型成short再赋给s;
s=s+(short)5.0; //有问题!为什么这里又会丢失精度?不是先执行括号的转型然后再相加吗?

请谁针对这些很基础的问题详细说一下,或者提供一些文章。谢谢了!
ankyhe 2004-11-19
  • 打赏
  • 举报
回复
s+=5.0;
//等价于下面的伪码:
s=(short)(s+5.0); //其中s+5.0的结果是double的。
羊城咩咩咩 2004-11-19
  • 打赏
  • 举报
回复
另外5.0是double
羊城咩咩咩 2004-11-19
  • 打赏
  • 举报
回复
楼上的没有理解到我的疑问。
我的意思是:
short s=1; //而此中的1是否为int呢?还是什么都不是,只是一个数值?
s=s+1; //此中的1为int
catblue 2004-11-19
  • 打赏
  • 举报
回复
主要是类型转化的问题
说白了就是,小的可以往大的方面转型,但是大的要往小的方面转型,必须要强制转,不然当然要出错。

楼上的int i = (int)5.0;就可以了,因为5.0 是float
羊城咩咩咩 2004-11-19
  • 打赏
  • 举报
回复
s=s+1;
的时候,s是short,右边的short会向int转型。那证明了1是整形。
那是否我们在初始化一个基础类型的时候,例如
short s=1;
上面的这个1是否也是int?而系统会自动把1转型成short?
如果上面的成立,那么
int i=5.0
为何又不能成立呢?
wandou999 2004-11-19
  • 打赏
  • 举报
回复
注意类型之间的转换
javafaq2004 2004-11-19
  • 打赏
  • 举报
回复
s+=1
相当于s = (short)(s + 1)在java 规范中可以看到。
而s + 1 向但与(int)s + 1
而对于强制性类型转化,如果从一个存取空间比较小的变量转化到一个存取空间比较大则没错误,如果倒过来就不行。
classjava 2004-11-19
  • 打赏
  • 举报
回复
short s=1; //s是short型
s=s+1; //系统先把s+1的s转为整型,当然不可以赋值给那个s=的s
//可以把s前面加个s=short(s+1)

short s=1;//s是short型
s+=1;//系统默认转型^_^,就好象同个s一样
syilo 2004-11-19
  • 打赏
  • 举报
回复
那么
short s = 1;
s+ = 5.0;
的s的数据类型又是怎么转化的
qingxin1010 2004-11-19
  • 打赏
  • 举报
回复
short s=1; //s是short型
s=s+1; //s是int型,类型没有转换,所以错误

short s=1;//s是short型
s+=1;//s 仍然是short型,好像是s+=1和s=s+1是相等的,但是他们的编译过程是不同的,s=s+1两边的类型不一样,但是s+=1是s=s的,是相加过后进行类型转换过后再赋值给s 的。
Michael_L_X 2004-11-19
  • 打赏
  • 举报
回复
你再试试,这个问题不存在
okitgo 2004-11-19
  • 打赏
  • 举报
回复
要用s = (short)(s + 1)才行

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧