令人困惑的代码,编译良好。此代码的工作原理是什么?

2022-09-04 08:00:31

下面的代码编译并给出作为输出,这对我来说有点令人困惑。我尝试了这个,但从那里我也无法弄清楚。我已经检查了类似的帖子,但在这里找不到类似的问题。1javap

看看代码:

int i = (byte) + (char) - (int) + (long) - 1;
System.out.println(i);

这是它的字节码

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

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


答案 1

这只是一个一元 + 和 - 操作与类型转换混合的序列。

你从 -1 开始,把它强制转换为长,一元加号不执行任何操作,将其转换为 int,一元减号(值现在是 +1),强制转换为 char,一元 +,强制转换为字节。


答案 2

您可以阅读为

int i = + - + - 1;
System.out.println(i);

或者如果您愿意

int i = - - 1;
System.out.println(i);

或者如果您愿意

int i = -1 * - 1;
System.out.println(i);

其他施法没有效果。