public class Test {
public static void main(String[] args) {
short i = 1;
i = i + 1;
System.out.println(i);
}
}
无法运行报错
Test3.java:4: 可能损失精度
找到: int
需要: short
i = i + 1;
^
1 错误
但是我把i = i + 1改成i+=1;就能通过编译且能运行成功,这是为什么呢???i = i + 1和i+=1不是一个意思吗???
public static void main(String[] args) {
short i = 1;
i = i + 1;
System.out.println(i);
}
}
无法运行报错
Test3.java:4: 可能损失精度
找到: int
需要: short
i = i + 1;
^
1 错误
但是我把i = i + 1改成i+=1;就能通过编译且能运行成功,这是为什么呢???i = i + 1和i+=1不是一个意思吗???
i = i + 1;
i + 1运行结果是int类型,需要强制类型转换
i+=1进行运算时将自动地执行窄化原始类型转换
i+=1会自动把1转成short来运算
i+1不会这么做,这个计算的结果是int,所以再赋值给short类型变量需要强制类型转换
i=(short)(i+1);or
i+=1;
1. 若进行运算的数值中有一个是Double型,则最后的结果为Double
2. .......................Float................Float
3. .......................Long.................Long
4.否则,最后的运算结果都是int型
当你用i+1作运算的时候,1的默认类型是int,所以计算的结果结果为2,编译器会向默认向类型大的一方转换如:short->int->long ,所以报错原因也就明确了。
其次:i+=1这里只操作的是一个变量i,所以会在i原有的类型上进行操作。