如果short
自动升级为int
算术运算,那么为什么是:
short thirty = 10 * 3;
对short
变量的合法赋值thirty
?
反过来,这是:
short ten = 10;
short three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
以及这个:
int ten = 10;
int three = 3;
short thirty = ten * three; // DOES NOT COMPILE AS EXPECTED
不会编译,因为不允许在未按预期进行转换的情况下int
为a 赋值short
。
关于数字文字,有什么特别的事情吗?
编译器
—
Felix
10 * 3
使用结果计算并初始化变量。在您的非工作示例中,计算是在运行时进行的,JVM进行了强制转换。
我认为这是stackoverflow.com/questions/30346587/java-char-to-byte-casting或stackoverflow.com/questions/9379983/…的副本。但是:请注意
—
Marco13
final int ten = 10; final int three = 3; short thirty = ten * three;
编译正常。
If short is automatically promoted to int in arithmetic operations
-没关系。无论是10
也不3
是空头,也不是提拔,他们是文字。
@MatthewRead:但是即使是文字,它们也必须作为特定的数据类型进行评估,对吗?是,编译器将s
—
拉尔斯
10
和s 3
评估为int
s 是真的吗?
short thirty = 10 * 3;
最有可能被short thirty = 30;
编译器所代替,这是一个有效的语句。(不过,我必须查找相关的JLS部分)。