文字中的隐式转换

Lui*_*sk4 0 java literals implicit-conversion

默认情况下,Java假定您使用文字定义int值.

short x = 20; // There is an implicit conversion
Run Code Online (Sandbox Code Playgroud)

但是当我们在算术表达式中使用"x"变量时,例如:

short y = x * 2; //DOES NOT COMPILE
Run Code Online (Sandbox Code Playgroud)

我们知道20*2的结果是40,可以很容易地拟合成一个短变量.到底是怎么回事?

OH *_*ERS 5

因为x不是最终的,所以当程序到达以下点时,无法保证变量仍为20:

short y = x * 2;
Run Code Online (Sandbox Code Playgroud)

编译器只考虑你的非最终变量x可能在那个时候(通过任何方式)改变的可能性,因此不会将其简单地视为20.如果你将x定义为final,隐式会话将起作用:

final short x = 20; // There is an implicit conversion
short y = x * 2; //DOES COMPILE
Run Code Online (Sandbox Code Playgroud)