其实这两段代码会有一点区别:
***** Class1.p
8: invokespecial #4 // Method ClassA."":(Ljava/lang/String;)V
11: astore_3
12: aload_3
13: invokevirtual #5 // Method ClassA.getValue:()D
16: dstore_1
17: dload_1
18: dreturn
}
***** CLASS2.P
8: invokespecial #4 // Method ClassA."":(Ljava/lang/String;)V
11: invokevirtual #5 // Method ClassA.getValue:()D
14: dstore_1
15: dload_1
16: dreturn
}
*****
即我们在这里看到两个额外的变体#1说明:
11: astore_3
12: aload_3
但是,似乎在jvm加热之后,这些指令将被优化(消除),这根本就没有区别.