0

我只是在问编写代码的不同方式是否以不同方式或相同方式编译。

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

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)

4

3 回答 3

2

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

于 2013-08-28T12:34:38.463 回答
0

javap -c YourClass.class 你编译的代码是什么编译器通过将类数据转换为字节码来开始运行。

字节码类似于仅包含 0,1 的机器语言,因此,无论您创建的是对象还是任何其他将其转换为具有特定模式的字节码但与您的对象或您在类中创建的内容不同的东西

于 2013-08-28T12:32:07.543 回答
0

首先,您总是可以通过自己编译和反汇编一个类来检查。

无论如何,第一个例子使用了一个局部变量,所以它会产生不同的字节码。据我所见,Javac 从不优化掉局部变量,即使它们没有被使用或者很容易被内联。大概这是为了支持调试,尽管即使在没有调试信息的情况下编译也会发生这种情况。

于 2013-08-28T13:30:07.847 回答