这是我当前最喜欢的Java难题。 您如何获取代码来执行此操作?
Integer b = 2;
Integer c = 1;System.out.println("b+c : " + (b+c) ); // output: 'b+c : 4' !!
Sytem.out.println()没有技巧,即您将能够在调试器中看到相同的值。 提示:您需要在程序中的某处之前添加几行代码。 向下滚动以获取解决方案。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
public static void main(String... args)throws Exception{Integer a = 2;Field valField = a.getClass().getDeclaredField("value");valField.setAccessible(true);valField.setInt(a, 3);Integer b = 2;Integer c = 1;System.out.println("b+c : " + (b+c) ); // b+c : 4
}
如您所见(并且我鼓励您转到Integer的源代码),这里有一个静态缓存(查找Inner类IntegerCache),其中Integer的值映射到其对应的int值。 尽管您可以使用属性java.lang.Integer.IntegerCache.high
进行调整,但缓存将存储从-128到127的所有数字。
翻译自: https://www.javacodegeeks.com/2015/01/my-favourite-java-puzzler-2-1-4.html