在Java类中,我们是否为该类的每个对象都有单独的实例方法副本?

Adi*_*arg 4 java

如果不是,运行时如何,实例方法是否使用同一对象的实例变量?例如,我有一个类A,具有实例变量aVariable和非静态方法aMethod().现在我有一个A类的对象,让我们把它命名为aObject.aMethod利用aVariable.当我调用这个方法时,它如何知道在内存aVariable中使用哪个以及它在哪里存储?我们是否将所有对象信息传递给方法?请帮我解决一下这个.

And*_*ner 7

请参阅JVM规范,Sec 3.7:

int add12and13() {
    return addTwo(12, 13);
  }
Run Code Online (Sandbox Code Playgroud)

这编译为:

Method int add12and13()
0   aload_0             // Push local variable 0 (this)
1   bipush 12           // Push int constant 12
3   bipush 13           // Push int constant 13
5   invokevirtual #4    // Method Example.addtwo(II)I
8   ireturn             // Return int on top of operand stack;
                        // it is the int result of addTwo()
Run Code Online (Sandbox Code Playgroud)

通过首先将对当前实例的引用推送到操作数堆栈来设置调用.然后推送方法调用的参数,即int值12和13.

因此,this引用(或接收器参数的任何其他值)只是作为另一个参数被压入堆栈.因此,每个实例不需要单独的方法副本.