ı bir Fraction
sınıf var diyelim:Aşağıdaki kod neden java bayt koduyla yeni bir + dup op komutuna çeviriyor?
class Fraction {
...
/** Invert current fraction */
public Fraction inverse() {
return new Fraction(den,num);
}
...
}
Ve bu yukarıdaki yöntemin baytkodu olarak çıkıyor şudur: Ben anlamaya çalışıyorum
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
neden 3 konumundaki yönerge ilk sırada yer aldı. Bunu yapmak için aşağıdakileri yapmamız gerektiğini söyleyebilirim:
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
Neden böyle değil?
invokespecial, yığındaki Kesir'e bir referans koymayacaktır, o zaman? –
@devoured elysium '() V',' void' fraksiyon' değil döndürür. –
Meh, haklısın. Kısa ve basit açıklama için –