我有一个方法A.passLong(Long)接收一个long作为参数。我检测B类,并添加该方法的调用,并传递一个长常量。
当我调试调用的方法A.passLong(Long)时,我看到该方法接收的数字不是我作为参数传递的数字。
我使用“javap -verbose”用已检测的代码反编译类的转储,看起来从常量池读取的数字(我用调试器看到的数字)是预期数字和常量池中的以下数字。
这不是JIT问题,因为它在调试和JIT被禁用时会重现。
有什么想法吗?
答案 0 :(得分:2)
这看起来像Sun Java1.5_04中的known issue。之后他们添加了一些代码来保护类中的反射(和常量池),同时重新定义它们。见release notes。我知道Sun的1.5_12效果很好。
您使用的是哪个JVM?