为什么Java不能将数据类型划分short为byte然后将结果转换为类型short?为什么没有自动翻译结果成short,是不是多了byte?
public class Main {
public static void main(String[] args) {
short a = 250;
byte b = 2;
short c = (short) (a / b);
// это работает, но почему нужно явно указывать (short)?
// int c = a / b;
// почему если переменную сделать типом int,
// явно указывать тип не нужно?
System.out.println(c);
}
}
答案在 Java 规范§5.6.2中。对于具有两个操作数(
*、/、和其他)的操作+,-类型按以下顺序更改:double,则将另一个转换为double。float,则将另一个转换为float。long,则将另一个转换为long。int.在您的情况下,第一个操作数是 type
short,第二个是typebyte,所以它们都转换为int.一切都很简单。a / b 的结果是 int。大型类型不会自动转换为较小的类型。