令人困惑的代码,编译好.这段代码如何工作?

eat*_*ode 14 java types

下面的代码编译并给出1输出,这对我来说有点困惑.我试过javap这个,但从那里我也想不出来.我已经检查了类似的帖子,但在这里找不到类似的问题.

看看代码:

int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

这是字节码

Compiled from "Test.java"
public class Test {
  public Test();
  public static void main(java.lang.String[]);
}
Run Code Online (Sandbox Code Playgroud)

这些类型如何在这里工作?它是否依赖于数据类型的大小?代码如何工作?

Hen*_*nry 18

这只是一系列的一元+和 - 操作与类型转换混合在一起.

你从-1开始,把它转换为long,unary plus什么都不做,把它转换成int,unary减去(值现在是+1),强制转换为char,unary +,强制转换为byte.


ven*_*iac 6

你可以读作

int i = + - + - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

或者如果你愿意的话

int i = - - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

或者如果你愿意的话

int i = -1 * - 1;
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

其他演员没有效果.