java - 令人困惑的代码,编译正常。这段代码是如何工作的?

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

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

最佳答案

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

您从 -1 开始,将其转换为 long,一元加号不执行任何操作,将其转换为 int,一元减号(值现在为 +1),转换为 char,一元 +,转换为字节。

关于java - 令人困惑的代码,编译正常。这段代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21275650/

相关文章:

java - 关于 fragment 的类膨胀错误

java - 查找 JSP 中是否启用/禁用 JavaScript

types - 结构可以在标准 ML 中实现多个签名吗?

java - 无法让所有UI组件出现在RelativeLayout中

java - 如何抑制有关 Sun 专有 API 的 Java 编译器警告

java - Hadoop 类型转换

python-2.7 - 我应该如何使用 Google 风格的 Sphinx 记录列表、选项和 yield ?

haskell - 为什么 Haskell 可以在这个函数中推导出 [] 类型

types - Go methods sets - 指针类型 *T 与接收者 T 的调用方法

java - ElasticSearch 中集群中的节点如何通信,以及我们如何决定应该在哪个节点存储文档以及稍后从哪里检索文档?