参考博客:
http://www.importnew.com/9162.html
测试代码如下:
public class Main { /** * 备注:结果跟你的JDK版本有关系: * * 我的是java version "1.6.0_16" * *这是JDK中的Integer.java中valueOf的源代码: public static Integer valueOf(String s) throws NumberFormatException { return Integer.valueOf(parseInt(s, 10)); } public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); } public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); } public static int parseInt(String s, int radix) throws NumberFormatException { if (s == null) { throw new NumberFormatException("null"); } if (radix < Character.MIN_RADIX) { throw new NumberFormatException("radix " + radix + " less than Character.MIN_RADIX"); } if (radix > Character.MAX_RADIX) { throw new NumberFormatException("radix " + radix + " greater than Character.MAX_RADIX"); } int result = 0; boolean negative = false; int i = 0, max = s.length(); int limit; int multmin; int digit; if (max > 0) { if (s.charAt(0) == '-') { negative = true; limit = Integer.MIN_VALUE; i++; } else { limit = -Integer.MAX_VALUE; } multmin = limit / radix; if (i < max) { digit = Character.digit(s.charAt(i++),radix); if (digit < 0) { throw NumberFormatException.forInputString(s); } else { result = -digit; } } while (i < max) { // Accumulating negatively avoids surprises near MAX_VALUE digit = Character.digit(s.charAt(i++),radix); if (digit < 0) { throw NumberFormatException.forInputString(s); } if (result < multmin) { throw NumberFormatException.forInputString(s); } result *= radix; if (result < limit + digit) { throw NumberFormatException.forInputString(s); } result -= digit; } } else { throw NumberFormatException.forInputString(s); } if (negative) { if (i > 1) { return result; } else { throw NumberFormatException.forInputString(s); } } else { return -result; } } * @param args */ public static void main(String[] args) { System.out.println(Integer.valueOf(127) == Integer.valueOf(127)); System.out.println(Integer.valueOf("127") == Integer.valueOf(127)); System.out.println(Integer.valueOf("127") == Integer.valueOf("127")); System.out.println(Integer.parseInt("127") == Integer.parseInt("127")); System.out.println(Integer.valueOf(127) == Integer.parseInt("127")); System.out.println(Integer.valueOf("127") == Integer.parseInt("127")); System.out.println(Integer.valueOf(128) == Integer.valueOf(128)); System.out.println(Integer.valueOf("128") == Integer.valueOf(128)); System.out.println(Integer.valueOf("128") == Integer.valueOf("128")); System.out.println(Integer.parseInt("128") == Integer.parseInt("128")); System.out.println(Integer.valueOf(128) == Integer.parseInt("128")); System.out.println(Integer.valueOf("128") == Integer.parseInt("128")); } /** true true true true true true false false false true true true */}