这些代码块是否相同?我的意思是相同的,编译器是否完全以相同的方式解释它们?
int i = 2;
if (i == 0) {
System.out.println("0!");
} else if (i == 1) {
System.out.println("1!");
} else if (i == 2) {
System.out.println("2!");
} else {
System.out.println("?!");
}
int i = 2;
if (i == 0) {
System.out.println("0!");
} else {
if (i == 1) {
System.out.println("1!");
} else {
if (i == 2) {
System.out.println("2!");
} else {
System.out.println("?!");
}
}
}
正如您所看到的,这是Java。
虽然我的朋友和我都同意逻辑上这些完全相同,但我想知道java编译器是否以完全相同的方式编译它们。让我印象深刻的是,在第二个/ if块中,你在else块中嵌入了ifs和elses。
但是,由于我对汇编或java字节代码缺乏了解,因此编译完全相同。唯一的优势可能是语法糖,如果你愿意的话。
有人会让这个问题得到解决 - 假设你对答案非常有信心(否则可能会引发另一场辩论)。
答案 0 :(得分:1)
这两个代码示例的区别仅在于冗余花括号的使用,所以如果生成不同的代码,我会非常惊讶。但是很容易检查你是否真的很好奇 - 使用javap命令来显示字节码。