short s = 1; s = s + 1;
s = 1.这里的1 也是int类型的。编译器只要看到整数,就默认是int类型的。
首相1是常量,编译器会看“=”号右边的类型和左边是否存在转换的可能。这里可以转换
然后看“=”右边的数据是否在 左边类型的范围内,这里在。
编译器就会做一个自动转换动作,将1转换为short类型。
s = s + 1
这里编译器会做两步操作
s+1. 1是int类型的,会将s自动向上提升,变为int型和 1相加
s = s + 1
但是 “=”右边的s是一个变量,它存的是内存地址。指向的是一片内存空间。不会判断是否存在转换可能。“=”右边是int 左边是 short。 int占4个字节 short占2个字节。左边放不下。报错,数据精度丢失。具体解决就是上面说的 强转