Java Field.getLong()为不同的值范围返回不正确的值(在Android上)

Java Field.getLong()为不同的值范围返回不正确的值(在Android上),java,android,reflection,long-integer,primitive-types,Java,Android,Reflection,Long Integer,Primitive Types,我正在使用反射来访问一些公共静态最终长字段。不幸的是,Field.getLong()返回的long值通常与实际字段值不同。下面是一些代码来演示这一点(注意-我使用的值似乎在正确值和不正确值的范围之间存在边界,尽管可能存在更多边界): 以下是输出: D/test: HEX_00000000ffffffff=0xffffffff (correct) D/test: HEX_0000000100000000=0x1 (incorrect) D/test: HEX_0000007fffffffff=0x

我正在使用反射来访问一些公共静态最终长字段。不幸的是,Field.getLong()返回的long值通常与实际字段值不同。下面是一些代码来演示这一点(注意-我使用的值似乎在正确值和不正确值的范围之间存在边界,尽管可能存在更多边界):

以下是输出:

D/test: HEX_00000000ffffffff=0xffffffff (correct)
D/test: HEX_0000000100000000=0x1 (incorrect)
D/test: HEX_0000007fffffffff=0xffffffff (incorrect)
D/test: HEX_0000008000000000=0x8000000000 (correct)
D/test: HEX_000000ffffffffff=0xffffffffff (correct)
D/test: HEX_0000010000000000=0x100 (incorrect)
D/test: HEX_00007fffffffffff=0xffffffffff (incorrect)
D/test: HEX_0000800000000000=0x800000000000 (correct)
D/test: HEX_0000ffffffffffff=0xffffffffffff (correct)
D/test: HEX_0001000000000000=0x10000 (incorrect)
D/test: HEX_007fffffffffffff=0xffffffffffff (incorrect)
D/test: HEX_0080000000000000=0x80000000000000 (correct)
D/test: HEX_00ffffffffffffff=0xffffffffffffff (correct)
D/test: HEX_0100000000000000=0x1000000 (incorrect)
D/test: HEX_ffffffff7fffffff=0xffffffffffffffff (incorrect)
D/test: HEX_ffffffff80000000=0xffffffff80000000 (correct)
在运行最新股票安卓8.0的Nexus6p上测试

更新:使用(长)fld.get(null)读取值也有相同的问题

更新:使用Long而不是Long不会出现同样的问题


更新:我报告了错误。

您忘了提到在J2SE 8上,您的代码运行良好,一切都“正确”。输出中的字段与源代码不匹配。您的源代码中有16个,但输出中有19个。@Robert您有J2SE 8声明的参考资料吗?还是在安卓系统上运行时的变通方法?@马克·卡特:就像我一样,你自己试试代码,就行了。太棒了!您是否在其他地方演示过该错误确实在
字段中#getLong()
而不是
Long.toHexString()
?另外,反映已经是公共静态final的东西的用例是什么?
D/test: HEX_00000000ffffffff=0xffffffff (correct)
D/test: HEX_0000000100000000=0x1 (incorrect)
D/test: HEX_0000007fffffffff=0xffffffff (incorrect)
D/test: HEX_0000008000000000=0x8000000000 (correct)
D/test: HEX_000000ffffffffff=0xffffffffff (correct)
D/test: HEX_0000010000000000=0x100 (incorrect)
D/test: HEX_00007fffffffffff=0xffffffffff (incorrect)
D/test: HEX_0000800000000000=0x800000000000 (correct)
D/test: HEX_0000ffffffffffff=0xffffffffffff (correct)
D/test: HEX_0001000000000000=0x10000 (incorrect)
D/test: HEX_007fffffffffffff=0xffffffffffff (incorrect)
D/test: HEX_0080000000000000=0x80000000000000 (correct)
D/test: HEX_00ffffffffffffff=0xffffffffffffff (correct)
D/test: HEX_0100000000000000=0x1000000 (incorrect)
D/test: HEX_ffffffff7fffffff=0xffffffffffffffff (incorrect)
D/test: HEX_ffffffff80000000=0xffffffff80000000 (correct)