【发布时间】:2012-10-14 21:18:45
【问题描述】:
假设您正在编写一个 Java(或 Java 子集)编译器,并且您想为一元非表达式 !E 生成字节码。您已经通过了类型检查,所以您知道 E 的类型为 boolean,也就是说,它会将 1 或 0 推入操作数堆栈。
一种方法是(在 Jasmin 语法中):
E
ifeq truelabel
iconst_0
goto stoplabel
truelabel:
iconst_1
stoplabel:
即如果堆栈上有 0 则推 1,否则推 0。另一种方法是利用 boolean 只是一个 int 的值 1 或 0 的事实,就是说 @ 987654331@并生成
E
iconst_1
iadd
iconst_2
irem
使用一个比另一个有优势吗?还是完全不同的东西?
【问题讨论】:
标签: java compiler-construction jvm javac bytecode