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

0

まず、自分でクラスをコンパイルおよび逆アセンブルするだけで、いつでも確認できます。

とにかく、最初の例はローカル変数を使用しているため、異なるバイトコードになります。私が見た限りでは、Javac は、ローカル変数が未使用であるか、簡単にインライン化できる場合でも、それらを最適化することはありません。おそらくこれは、デバッグ情報なしでコンパイルした場合でも発生しますが、デバッグをサポートするためです。

于 2013-08-28T13:30:07.847 に答える