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

时间:2014-01-22 06:21:32

标签: java types

以下代码编译并将1作为输出,对我来说有点困惑。我为此尝试javap,但从那里我也想不出来。我已经检查了类似的帖子,但在这里找不到类似的问题。

看看代码:

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[]);
}

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

2 个答案:

答案 0 :(得分:18)

这只是一系列带有类型转换的一元+和 - 操作。

你从-1开始,将它转换为long,unary plus什么也不做,将它转换为int,一元减号(值现在为+1),强制转换为char,unary +,强制转换为byte。

答案 1 :(得分:6)

您可以阅读

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

或者如果您愿意

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

或者如果您愿意

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

其他演员没有效果。