黑马程序员技术交流社区

标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 [打印本页]

作者: 刘涛    时间: 2011-11-25 08:36
标题: short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错
本帖最后由 刘涛 于 2011-11-28 18:13 编辑

short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 += 1;有什么错?

作者: 冯敏    时间: 2011-11-25 08:41
首先s1是短整型的,1代表长整型int类型的,那么相加之后的结果类型为两者之中大的,即为int,那么把int类型的赋值给short类型的,它会丢失精度,s1+=1同样道理
作者: 侯伟浩    时间: 2011-11-25 08:44
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
范例:
public class My {
        public static void main(String args[]) throws Exception
        {
                short s1=1;
                s1=(short) (s1+1);//转型后没错
                s1+=1;                 //直接通过编译
        }
}



作者: 强子    时间: 2011-11-25 08:54
2楼正解
作者: 应国炎    时间: 2011-11-29 00:19
s1 = s1 + 1;   结果向高处转换,shot int向int转换,所以S1+1的结果是int型,再赋值给shot int型S1就会报错

s1 += 1; JAVA对+= 有自动转换功能,所以不会报错



作者: 刘志祥    时间: 2011-12-2 11:23
小结:
对于编程中的运算如加  减   乘   除  :
1.在运算时要统一两边的运算值类型,统一时低级向高级转换,这个转换时自动的。
2.在赋值时右边的运算值类型也应该跟左边的变量类型是一样的。如果不一样是不能赋值的,如果非要赋值,就要进行强制转换,格式就是(要转换的类型)。
这些是我能想到的,希望朋友们能指教,小弟有礼了!!




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