社区
Java SE
帖子详情
关于short s=1;s+=1;问题的思考
羊城咩咩咩
2004-11-19 01:10:18
short s=1;
s=s+1;
不能通过编译
当下面的
short s=1;
s+=1;
却可以。为何?
...全文
546
19
打赏
收藏
关于short s=1;s+=1;问题的思考
short s=1; s=s+1; 不能通过编译 当下面的 short s=1; s+=1; 却可以。为何?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)才行
收录Java基础面试题
一、
思考
如下代码中s = s + 2;与s += 2;的区别?
short
s = 3; s = s + 2; s += 2;解:
short
s = 3; s = s + 2; // 编译失败,因为s会被提升为int类型,运算后的结果还是int类型,无法赋值给
short
类型 s += 2; // 编译通过,因为+=运算符在给s赋值时,自动完成了强转操作二、switch语句中case标签可以是哪些?
【java_基础深入】java中
short
类型相加如何防止溢出
Java中的
short
的运算 自运算后赋值
short
s1 = 3;
short
s2 = ++s1; // 编译正常 相加运算后赋值
short
s1 = 666;
short
s2 = 777;
short
s3 = s1 + s2; // 编译错误
s1=‘1‘,s2=‘1‘;s1==s2结果为true还是false?你真的知道原理吗?
今天和同学一起讨论==和equlas区别到底是有啥区别,一本正经给他分析了半天,结果呢idea一运行发现自己是错的····。
【Java面试系列】Java面试题基础系列212道(上)
目录 1.Java面试题 2.
问题
解析 1、面向对象的特征有哪些方面? 2、访问修饰符 public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、
short
s1 = 1; s1 = s1 + 1;有错吗?
short
s1 = 1; s1 += 1;有错吗? 6、Java 有没...
JAVA基础__语法1
诞生于1995 SUN JAVA是一门强类型严谨性的语言,严格区分大小写,完全面向对象,安全可靠,跨平台性,具有良好的可移植性 三种技术架构JAVA EE/SE/ME dos命令行,课程中常见的命令。 • dir : 列出当前目录下的文件以及文件夹 • md : 创建目录 • rd : 删除目录 • cd : 进入指定目
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章