楼主,你好!
首先,回答这个问题,我们要先弄懂 short 和 int 在内存中占多少个字节:
short 是 int 的修饰符,在内存中占两个字节。
int 是整型,在内存中占四个字节。
好了,现在来分析题目:
short a=1;a=a+1;
分号代表语句的结束。这两句代码,都是赋值语句,cpu在执行的时候都是从右往左执行的。
首先,第一句是short a=1.这时1默认是int 类型。第一句的意思是把整型数据1赋值给short类型的变量a。很明显,是不够存的。因此 ...
楼主,你好!
首先,回答这个问题,我们要先弄懂 short 和 int 在内存中占多少个字节:
short 是 int 的修饰符,在内存中占两个字节。
int 是整型,在内存中占四个字节。
好了,现在来分析题目:
short a=1;a=a+1;
分号代表语句的结束。这两句代码,都是赋值语句,cpu在执行的时候都是从右往左执行的。
首先,第一句是short a=1.这时1默认是int 类型。第一句的意思是把整型数据1赋值给short类型的变量a。很明显,是不够存的。因此丢失精度。第二句是把短整型short类型a与整型数据1进行加法运算,结果是整型(自动类型转换),而在第一句已经定义了a变量是短整型。因此,a+1的整型结果赋值给短整型。同样的道理,也是不够存的。也会丢失精度。这两句代码弄明白之后,第三句和第四句也是一个道理了。纯手打的,满意请采纳,谢谢!
short a=1;a=a+1;
首先我们要知道,数字默认为 int类型,对于short a = 1;这里编译器为我们自动判断 如果赋值没有超过short的表示范围,则赋值成功,如果超过了,则报错;对于a=a+1,首先进行 等号 右边的计算,a是short类型变量,与 int类型变量1 相加后,提升至int类型,在用short类型的 a 接收它,报错。处理方法 a = (short)(a+1);
class Swap {
public static void main(String[] args){
short a = 1;
//右边如果有变量的话,这两个数字都会转换为int型的然后在计算
// 右边为int型的值,赋值给byte型的会损失精度
// 错误: 可能损失精度
a = a + 1;
short b = 1;
//赋值语句错误
// 错误: 意外的类型
b + 1 =b;
}
}