java代码是如何编译的

时间:2013-08-28 12:16:54

标签: java compilation bytecode

我只是想问一下编写代码的不同方式是以不同方式编译还是相同。

所以,如果我有这样的东西:(“对象”是类名)

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)相同。

3 个答案:

答案 0 :(得分:2)

如果getMethod()的结果为null,则第一个代码片段的行为与第二个不同。很明显,字节代码必须不同。

答案 1 :(得分:0)

javap -c YourClass.class编译的代码编译器通过将类数据转换为字节代码来启动函数。

字节代码类似于机器语言,它只包含0,1所以,无论你想要什么,它都是对象或其他任何东西,它转换为具有特定模式的字节码,但与你的对象或你创造的东西不一样在你的班级

答案 2 :(得分:0)

首先,您可以随时自行编译和反汇编来检查。

无论如何,第一个例子使用局部变量,因此它将导致不同的字节码。从我所看到的情况来看,Javac从未优化掉局部变量,即使它们未被使用或者很容易被内联。据推测,这是为了支持调试,尽管即使在没有调试信息的情况下进行编译也会发生这种情况。