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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文涛 中级黑马   /  2013-11-12 13:10  /  1411 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

short s1 = 1; s1 = s1 + 1;
short s1 = 1; s1 += 1;
为什么第一个是错的,第二个是正确的呢

点评

这个问题论坛里都有答案了  发表于 2013-11-12 17:27

8 个回复

倒序浏览
FFF 金牌黑马 2013-11-12 13:44:09
沙发
short s1 = 1; s1 = s1 + 1;
short s1 = 1; s1 += 1;

数据结构的问题。
当你的给出一个自然数"1"时,Jvm会默认为1是Int类型的数据。而short的MAX是32767.超出了其最大值,所以会出错。需要强制转换。
而s1+=1;正确,是因为。s1+=1;等同于,s1=(short)(s1+1);+=自带强制转换。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
hel 中级黑马 2013-11-12 15:28:10
藤椅
short s1 = 1; s1 = s1 + 1;  将s1 + 1 中的S1默认提升为int ,int+int应该是int,所以类型转换错误
应该改为:s1 =short( s1 + 1)


short s1 = 1; s1 += 1;    这个其中的 += 是一个整体的符号,不存在什么提升的问题,所以正确
回复 使用道具 举报
FFF 发表于 2013-11-12 13:44
short s1 = 1; s1 = s1 + 1;
short s1 = 1; s1 += 1;

short a = 12;
short b = 12;
a =  a + b ;
两个short类型相加为什么还报错?我觉得不应该是1默认为int类型的事,应该是小于int类型的short、byte运算时都会转换为int进行运算,因为32位是大多数计算机中运算最快的一个类型,而并非位数越小运算越快。
回复 使用道具 举报
Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。因此,如果把两个short类型值相加,最后会得到一个int类型的结果。如果需要得到short类型结果,必须将这个short类型的结果显式转换为byte类型

+=符号的运算问题楼上已经说过了,不需要重复!
回复 使用道具 举报
short s1 = 1; s1 = s1 + 1;这个1是int型的,s1是short型,相加结果为int型,而你定义的是short型的,所以编译不通过

short s1 = 1; s1 += 1;  +=这个是隐式强制转换 ,s1=short(s1+1)结果为short型,编译通过

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
FFF 金牌黑马 2013-11-12 18:52:50
7#
本帖最后由 FFF 于 2013-11-12 18:56 编辑
bpsend 发表于 2013-11-12 15:58
short a = 12;
short b = 12;
a =  a + b ;

b是变量,编译器编译时并不会知道b具体是多少(编译时不会赋值,所以不知道b是多少),所以会认为b是所有可能的值,因此a+b不能通过编译。正确为: b = (short) (a + b);
亲爱的,不要把简单的问题复杂化了哦~

Sorry,我之前回答错了!应该是s1=s1+1.应该是后面的s1的问题,不是1的问题!理由同上。真不好意思呐~{:soso_e149:}
回复 使用道具 举报
bpsend 中级黑马 2013-11-12 21:50:17
8#
FFF 发表于 2013-11-12 18:52
b是变量,编译器编译时并不会知道b具体是多少(编译时不会赋值,所以不知道b是多少),所以会认为b是所有 ...

嗯,我也认个错,是我想复杂了,以后我会确定好答案后在回复的。{:3_58:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马