我只是想问一下编写代码的不同方式是以不同方式编译还是相同。
所以,如果我有这样的东西:(“对象”是类名)
object o = class.getMethod();
if(o != null){
if(o.get() != null){
//do whatever....
}
}
会和它一样吗?
if(class.getMethod().get() != null){
//do whatever...
}
当编译代码时,它们在字节码中的编写方式完全相同。
我听说while(true)
和while(1==1)
在字节码中的含义与while(true)
相同。
答案 0 :(得分:2)
如果getMethod()
的结果为null
,则第一个代码片段的行为与第二个不同。很明显,字节代码必须不同。
答案 1 :(得分:0)
javap -c YourClass.class编译的代码编译器通过将类数据转换为字节代码来启动函数。
字节代码类似于机器语言,它只包含0,1所以,无论你想要什么,它都是对象或其他任何东西,它转换为具有特定模式的字节码,但与你的对象或你创造的东西不一样在你的班级
答案 2 :(得分:0)
首先,您可以随时自行编译和反汇编来检查。
无论如何,第一个例子使用局部变量,因此它将导致不同的字节码。从我所看到的情况来看,Javac从未优化掉局部变量,即使它们未被使用或者很容易被内联。据推测,这是为了支持调试,尽管即使在没有调试信息的情况下进行编译也会发生这种情况。