2

我有一个方法 A.passLong(Long) 接收 long 作为参数。我检测类 B,并添加对该方法的调用,并传递一个长常量。

当我调试调用的方法 A.passLong(Long) 时,我看到该方法接收到的数字不是我作为参数传递的数字。

我使用“javap -verbose”来反编译带有检测代码的类的转储,看起来从常量池中读取的数字(我在调试器中看到的数字)是预期数字和以下数字的串联在常量池中。

这不是 JIT 问题,因为它会在调试和禁用 JIT 时重现。

有任何想法吗?

4

1 回答 1

2

这看起来像是 Sun Java1.5_04 中的一个已知问题。此后,他们添加了一些代码来保护类中的反射(和常量池),同时重新定义它们。请参阅发行说明。我知道 Sun 的 1.5_12 运行良好。

那么,您使用的是哪个 JVM?

于 2013-03-10T09:23:18.367 回答