1
直接上代码
public class IntergeTest { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Integer a = 2; Integer b = 3; Field value = Integer.class.getDeclaredField("value"); value.setAccessible(true); int g = a; value.set(a,b); value.set(b,g); System.out.println(a); System.out.println(b); Class<?>[] declaredClasses = Integer.class.getDeclaredClasses(); Field cache = declaredClasses[0].getDeclaredField("cache"); cache.setAccessible(true); //原因在这里 System.out.println(JSON.toJSONString(cache)); System.out.println(JSON.toJSONString(cache.get(a))); // 调戏效果 Integer q = 2; System.out.println(q); } }
2 运行结果
3
3
{"accessible":true,"annotatedType":{"annotatedGenericComponentType":{"annotations":[],"declaredAnnotations":[],"type":"java.lang.Integer"},"annotations":[],"declaredAnnotations":[],"type":"[Ljava.lang.Integer;"},"annotations":[],"declaringClass":"java.lang.Integer$IntegerCache","enumConstant":false,"genericType":"[Ljava.lang.Integer;","modifiers":24,"name":"cache","synthetic":false,"type":"[Ljava.lang.Integer;"}
[-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,3,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127]
3
3 解释: -128 - 127 之间的Integer是缓存对象。
Process finished with exit code 0