Integer a = new Integer(1);
Integer b = Integer.valueOf(1);
遇上两句话有什么区别?
请看Integer的源码中关于valueOf的简介:
1 public static Integer valueOf(int i) { 2 assert IntegerCache.high >= 127; 3 if (i >= IntegerCache.low && i <= IntegerCache.high) 4 return IntegerCache.cache[i + (-IntegerCache.low)]; 5 return new Integer(i); 6 }
其中可以看到如果在合适的区间范围内它不回去创建新的对象,而是在IntegerCache中去查找,从而节省时间。