- valueOf - mengkonversi ke kelas Wrapper
- parseInt - mengkonversi ke tipe primitif
Integer.parseInt hanya menerima String dan mengembalikan tipe integer primitif (int).
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
Iteger.value Jika menerima int dan String. Jika nilainya adalah String, valueOf mengubahnya menjadi int sederhana menggunakan parseInt dan mengembalikan Integer baru jika input kurang dari -128 atau lebih besar dari 127. Jika input dalam kisaran (-128 - 127) selalu mengembalikan objek Integer dari suatu IntegerCache internal. Kelas integer mempertahankan kelas IntegerCache statis dalam yang bertindak sebagai cache dan menyimpan objek integer dari -128 ke 127 dan itulah sebabnya ketika kami mencoba untuk mendapatkan objek integer untuk 127 (misalnya) kami selalu mendapatkan objek yang sama.
Iteger.valueOf(200)akan memberikan Integer baru dari 200. Rasanya new Integer(200)
Iteger.valueOf(127)sama dengan Integer = 127;
Jika Anda tidak ingin mengkonversi String ke penggunaan Integer Iteger.valueOf.
Jika Anda tidak ingin mengkonversi String ke penggunaan int sederhana Integer.parseInt. Ini bekerja lebih cepat.
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 Integer valueOf(String s) throws NumberFormatException {
return Integer.valueOf(parseInt(s, 10));
}
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
}
private IntegerCache() {}
}
Dan membandingkan Integer.valueOf (127) == Integer.valueOf (127) mengembalikan nilai true
Integer a = 127; // Compiler converts this line to Integer a = Integer.valueOf(127);
Integer b = 127; // Compiler converts this line to Integer b = Integer.valueOf(127);
a == b; // return true
Karena itu dibutuhkan objek Integer dengan referensi yang sama dari cache.
Tetapi Integer.valueOf (128) == Integer.valueOf (128) salah, karena 128 berada di luar kisaran IntegerCache dan mengembalikan Integer baru, sehingga objek akan memiliki referensi yang berbeda.