如果我有一个字节变量: byte b = 0;
为什么以下工作:
b++;
b += 1; // compiles
…但这不是吗?
b = b + 1; // compile error
编译器第一理解为byte
第二int
吗?
[编辑]
我知道演员,但我想提请您注意 b++, b += 1 and b = b + 1
我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别
b += 1 and b = b + 1 ?
因为b += 1
是的等效项b = (byte)(b + 1)
,而的类型b + 1
被提升为int
(JLS§5.6.2二进制数值提升),因此,byte
如果不进行显式转换,则不能将其结果分配给它。
根据JLS,§15.26.2复合赋值运算符:
形式为E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,只是E1仅被评估一次。
问题内容: 为什么可以,但不能编译? 问题答案: 常量被评估为int,因此会溢出并为您提供一个新的int,该int可分配给,同时也被评估为equals ,而不能分配给。
问题内容: 我遇到了一些有关JVM / JIT活动的参考,其中似乎在编译字节码和解释字节码之间有区别。该特定注释声明的字节码在前10000次运行时进行解释,然后进行编译。 “编译”和“解释”字节码之间有什么区别? 问题答案: 解释字节码基本上是逐行读取字节码,不进行任何优化或任何操作,然后对其进行解析并实时执行。由于许多原因,这种方法效率低下,其中包括Java字节码设计得不能快速解释的问题。 编译
导航 目录 上一章:Lua 与 C/C++ 交互 下一章:LuaJIT 介绍
问题内容: 我的编译器类正在创建一种我们打算编译为Java字节码的语言。我们已经取得了很大的进步,并且正在接近代码生成的时间。 我们在查找有关如何从编译器创建.class文件的信息时遇到问题。您有什么资源可以为我们提供帮助吗?我们已经有很多关于指令集的文档,但是需要有关如何直接填写类文件/十六进制编写的信息。 我们不需要有关反编译.class文件的信息或建议。 即使是从头开始编写.class文件的
Compiling One Directory # compileall_compile_dir.py import compileall import glob def show(title): print(title) for filename in glob.glob('examples/**', recursi