黑马程序员技术交流社区

标题: 帮我看看为什么错了 [打印本页]

作者: 文涛    时间: 2013-11-12 13:10
标题: 帮我看看为什么错了
short s1 = 1; s1 = s1 + 1;
short s1 = 1; s1 += 1;
为什么第一个是错的,第二个是正确的呢
作者: FFF    时间: 2013-11-12 13:44
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);+=自带强制转换。
作者: hel    时间: 2013-11-12 15:28
short s1 = 1; s1 = s1 + 1;  将s1 + 1 中的S1默认提升为int ,int+int应该是int,所以类型转换错误
应该改为:s1 =short( s1 + 1)


short s1 = 1; s1 += 1;    这个其中的 += 是一个整体的符号,不存在什么提升的问题,所以正确
作者: bpsend    时间: 2013-11-12 15:58
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位是大多数计算机中运算最快的一个类型,而并非位数越小运算越快。
作者: Cheers_for_CRAZ    时间: 2013-11-12 16:19
Java中涉及byte、short和char类型的运算操作首先会把这些值转换为int类型,然后对int类型值进行运算,最后得到int类型的结果。因此,如果把两个short类型值相加,最后会得到一个int类型的结果。如果需要得到short类型结果,必须将这个short类型的结果显式转换为byte类型

+=符号的运算问题楼上已经说过了,不需要重复!
作者: Gump    时间: 2013-11-12 16:30
short s1 = 1; s1 = s1 + 1;这个1是int型的,s1是short型,相加结果为int型,而你定义的是short型的,所以编译不通过

short s1 = 1; s1 += 1;  +=这个是隐式强制转换 ,s1=short(s1+1)结果为short型,编译通过
作者: FFF    时间: 2013-11-12 18:52
本帖最后由 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
FFF 发表于 2013-11-12 18:52
b是变量,编译器编译时并不会知道b具体是多少(编译时不会赋值,所以不知道b是多少),所以会认为b是所有 ...

嗯,我也认个错,是我想复杂了,以后我会确定好答案后在回复的。{:3_58:}




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