- valueOf - Wrapper sınıfına dönüştürür
- parseInt - ilkel türe dönüştürür
Integer.parseInt yalnızca String kabul eder ve ilkel tamsayı türünü (int) döndürür.
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
Iteger.valueOf int ve String kabul eder. Değer String ise, parseInt kullanarak basit int değerine dönüştürün ve giriş -128'den küçük veya 127'den büyükse yeni Tamsayı döndürün. Girdi (-128 - 127) aralığındaysa, her zaman bir Tamsayı nesnesi dahili IntegerCache. Integer sınıfı, önbellek görevi gören ve -128'den 127'ye kadar tamsayı nesneleri tutan bir iç statik IntegerCache sınıfını korur ve bu nedenle 127 (örneğin) için tamsayı nesnesi almaya çalıştığımızda (örneğin) her zaman aynı nesneyi alırız.
Iteger.valueOf(200)
Sanki 200 yeni Tamsayı verecek new Integer(200)
Iteger.valueOf(127)
aynıdır Integer = 127
;
String'i Tamsayıya dönüştürmek istemezseniz kullanın Iteger.valueOf
.
Eğer basit int kullanımı String dönüştürmek alışkanlık varsa Integer.parseInt
. Daha hızlı çalışır.
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() {}
}
Ve Integer.valueOf (127) == Integer.valueOf (127) karşılaştırması true değerini döndürür
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
Çünkü aynı referanslara sahip Integer nesnelerini önbellekten alır.
Ancak Integer.valueOf (128) == Integer.valueOf (128) yanlıştır, çünkü 128 IntegerCache aralığının dışında olduğundan ve yeni Integer döndürdüğünden nesnelerin farklı referansları olacaktır.