Hãy nói rằng tôi có một lớp Fraction
:Tại sao đoạn mã sau dịch sang một hướng dẫn + dup op mới trong bytecode java?
class Fraction {
...
/** Invert current fraction */
public Fraction inverse() {
return new Fraction(den,num);
}
...
}
Và đây là những gì bytecode của các phương pháp trên hóa ra là:
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
Tôi đang cố gắng để hiểu tại sao hướng dẫn ở vị trí 3 đã được đặt ở nơi đầu tiên. Tôi muốn nói rằng chúng tôi chỉ cần thực hiện những điều sau để làm cho nó hoạt động:
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
Tại sao lại không như vậy?
invokespecial sẽ không đặt tham chiếu đến Fraction trên stack, sau đó? –
@devoured elysium '() V' trả về' void' không phải là 'Phân số'. –
Meh, bạn nói đúng. –