作业帮 > 综合 > 作业

short x = 7 + 7; x = x + 1;//报错

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 06:20:51
short x = 7 + 7; x = x + 1;//报错
short x = 7 + 7; //无错
x = x + 1; //报错
为什么?如果第二句报错原因是把1这个字面量当做int,short + int = int而报错的话我可以理解,那么第一句2个int字面量相加为何还能放在short里?
short a = (short)a + (short)1; //报错
short a = (short)1 + (short)1; //无错
求专业人士啊
同意楼上,补充如下:自动强制转换前提是等号右边的所有类型相同,第一句符合,第二句不符合.你想想,如果你是JVM,程序传递给你一个short+int你认为应该转换成int呢还是short呢?JVM里面没有定义应该转换成什么,而是认为这是错误,java不允许你这样做.
注:
1、我没有看过源码,但我是这样理解的
2、以上两句的写法不是良好的编程习惯,在使用到不是经常使用的基本数据类型的时候一定要注明标注类型,以方便类型转换.记住,保持良好的编程习惯
再问: 你说 自动强制转换前提是等号右边的所有类型相同 那么 int a = 1; int b = 2; short c = a + b; // a 和 b类型一致,还是要报错,这里为什么没自动转换呢
再答: nt a = 1;int b = 2;short c = a + b; 报错内容是:Type mismatch: cannot convert from int to short 明白是什么意思了吧。 再解释一下:short a= 1;short b= 2;int c = a+b;没有错,因为它是自动转换,相当于int c = (a+b) 先运算a+b,得到一个short类型的,但是short类型比int小,转换的时候不会损失精度,故编译不报错。而反过来,int a= 1;int b= 2;short c = a+b;虽然你确定答案就是3,但是java认为从长度大的数据转换成小的会损失精度(也就是楼上描述的"向下转型”)。所以编译报错:Type mismatch: cannot convert from int to short不能从int转换成short,如果你用eclipse开发,它会提示你add cast to “short”。其实就是要你手动地强制转换。 综上,①赋值的时候(也就是类似a = b+c或者a = 3等情况),严格来说类型不同不能放在一起运算(尤其是等号右方的运算),必须转换成同一类型(也就是你的x = x + 1;为什么报错,因为=号右方类型不一致) ②等号左右类型不一致时要转换类型,你可以理解为一种是自动转换,一种是手动转换(或者理解为强制转换) 说明:我的解释可能说法不对,但就是那个意思。学习java还是需要你思考,尤其是独立思考,看过一个知识点之后有模糊的地方一定要多想想。祝你能有所成长