はのは、私がFraction
クラスがあるとしましょう:次のコードは、Javaバイトコードの新しい+ dup命令に変換されるのはなぜですか?
class Fraction {
...
/** Invert current fraction */
public Fraction inverse() {
return new Fraction(den,num);
}
...
}
そして、これは、上記の方法のバイトコードがあることが判明何である:
0 new #1 <xyzTestes/system/fraction/Fraction>
3 dup
4 aload_0
5 getfield #16 <xyzTestes/system/fraction/Fraction.den>
8 aload_0
9 getfield #14 <xyzTestes/system/fraction/Fraction.num>
12 invokespecial #27 <xyzTestes/system/fraction/Fraction.<init>>
15 areturn
私は3位の理由命令を理解しようとしていますそこに最初に置かれた。
new #1 <xyzTestes/system/fraction/Fraction>
aload_0
getfield #16 <xyzTestes/system/fraction/Fraction.den>
aload_0
getfield #14 <xyzTestes/system/fraction/Fraction.num>
invokespecial #27 <xyzTestes/system/fraction/Fraction.<init>>
areturn
なぜそうでないのですか?
invokespecialは、Fractionへの参照をスタックに入れません。 –
@devoured elysium '()Vは 'Fraction'ではなく' void'を返します。 –
メー、そうです。 –