Integer、Long
valueOf 方法使用了缓存 -128 - 127,parseInt 和 parseLong 没有使用,所以推荐使用 valueOf 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| public final class Integer extends Number implements Comparable<Integer> { public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
public static int parseInt(String s, int radix) throws NumberFormatException{}
private static class IntegerCache{ static final int low = -128; static final int high; static final Integer cache[];
static { } } }
public final class Long extends Number implements Comparable<Long> { public static Long valueOf(long l) { final int offset = 128; if (l >= -128 && l <= 127) { return LongCache.cache[(int)l + offset]; } return new Long(l); }
public static long parseLong(String s, int radix) throws NumberFormatException{}
private static class LongCache { private LongCache(){}
static final Long cache[] = new Long[-(-128) + 127 + 1];
static { for(int i = 0; i < cache.length; i++) cache[i] = new Long(i - 128); } } }
|
String
String 是不可变的,因为String类是final的,保存数据的char数组也是final,方法返回的都是新的字符串
1 2 3 4 5 6
| public final class String implements java.io.Serializable, Comparable<String>, CharSequence { private final char value[];
}
|