数字运算,是一门语言安身立命的根本。如果连1+1都变得不可信了,整个程序就会变得不可信。
考虑到这样一段代码:
Integer a = 1;
System.out.println(a);
Integer b = 2;
System.out.println( a.intValue() == b.intValue() );
System.out.println(a.equals(b));
执行的结果,竟然是:
-996
true
true
这时候,你还敢继续把代码写下去么?
为什么会这样?
很简单,我们使用反射改变了某些东西。
下面这段代码,将会改变一些基本运算的执行逻辑,理所当然属于埋坑的范畴之一。我们还是先看一下它的行为。
public class StaticBlock {
static {
try {
Class<?> cls = Integer.class.getDeclaredClasses()[0];
Field f = cls.getDeclaredField("cache");
f.setAccessible(true);
Integer[] cache = ((Integer[]) f.get(cls));
for (int i