其实下面这些个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
之间的返回值都是从池里面获取的。
可怜的不在这个范围内的整数!默哀