short s = 3; // javac 编译后在字节码文件里实际还是int s=3
s = s + 2; // 向上转型 运算结果转变为int类型变量,与左侧字面类型不一致,赋值出错
s =(short) s + 2; // 强制类型转换,转变为short类型变量
s+=2; // 自动类型转换,javac编译后会将s+=2展开并自动插入一条(short)强制类型转换语句,结果同s=(short)s+2;
强转啊 int 是默认的类型 ,也就是在内存是32位的,而你short是16位的。类型不一样不可以计算啊
所以
short s = 3//对应的是short
s = s + 2 // 他们类型默认int 。<shurt> s= <int> s + <int>2.
基本数据类型不一样就要强制转换。
s+=2//表示的两边相加并且转换相同int类型.