其实下面这些个assert语句都可以通过junit测试。
1 2 3 4 5 6 7 8
| @Test public void integerValueOfTest() { Assert.assertTrue(Integer.valueOf(-128) == Integer.valueOf(-128)); Assert.assertFalse(Integer.valueOf(128) == Integer.valueOf(128)); Assert.assertTrue(Integer.valueOf(127) == Integer.valueOf(127)); Assert.assertTrue(Integer.valueOf(1) == Integer.valueOf(1)); Assert.assertFalse(Integer.valueOf(1000) == Integer.valueOf(1000)); }
|

Integer的public static Integer valueOf(int i)是一个工厂方法,每次调用都会返回一个新的Integer的对象。
但是为什么对于127和128的两个结果完全不一样???
撸一眼JDK的源码看看,底下就是那个valueOf的具体实现:
1 2 3 4 5
| public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
|
原来内部有个整型池(默认IntegerCache.low = -128和IntegerCache.high = 127),这样valueOf对于-128 ~ 127之间的返回值都是从池里面获取的。
可怜的不在这个范围内的整数!默哀