パッケージデータクラスのvalueOf()メソッド
14962 ワード
引用する
パッケージ・データ・クラスは直接値を割り当て、デフォルトではそのペアのvalueOf()メソッドを呼び出します.
逆コンパイル:
一、整形
Byte.valueOf(byte b)
Short.valueOf(short s)
Integer.valueOf(int i)
Long.valueOf(long l)
(1)-128~127以内の整数型で、初めて参照し、キャッシュ内のnew 1つのオブジェクト;再度参照し、キャッシュから直接検索します.(2)-128~127以外の整数型は、毎回new 1つのオブジェクトを必要とする.
二、浮動小数点型
Float.valueOf(float f)
Double.valueOf(double d)
浮動小数点型は毎回new 1つのオブジェクトを必要とします.
三、文字型
(1)「0」~'127」内の文字は、キャッシュ中に存在する:最初の参照、キャッシュ中のnew 1つのオブジェクト;再度参照すると、キャッシュから直接検索されます.(2)「0」~「127」以外の文字は、毎回new 1つのオブジェクトが表示される.
四、ブール型
パッケージ・データ・クラスは直接値を割り当て、デフォルトではそのペアのvalueOf()メソッドを呼び出します.
Integer i = 10;
逆コンパイル:
Integer i = Integer.valueOf(10);
一、整形
Byte.valueOf(byte b)
public static Byte valueOf(byte b) {
final int offset = 128;
return ByteCache.cache[(int)b + offset];
}
private static class ByteCache {
private ByteCache(){}
static final Byte cache[] = new Byte[-(-128) + 127 + 1]; /* 256*/
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Byte((byte)(i - 128)); /* -128 ~ 127 */
}
}
Short.valueOf(short s)
public static Short valueOf(short s) {
final int offset = 128;
int sAsInt = s;
if (sAsInt >= -128 && sAsInt <= 127) { // must cache
return ShortCache.cache[sAsInt + offset];
}
return new Short(s);
}
Integer.valueOf(int i)
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
Long.valueOf(long l)
public static Long valueOf(long l) {
final int offset = 128;
if (l >= -128 && l <= 127) { // will cache
return LongCache.cache[(int)l + offset];
}
return new Long(l);
}
(1)-128~127以内の整数型で、初めて参照し、キャッシュ内のnew 1つのオブジェクト;再度参照し、キャッシュから直接検索します.(2)-128~127以外の整数型は、毎回new 1つのオブジェクトを必要とする.
二、浮動小数点型
Float.valueOf(float f)
public static Float valueOf(float f) {
return new Float(f);
}
Double.valueOf(double d)
public static Double valueOf(double d) {
return new Double(d);
}
浮動小数点型は毎回new 1つのオブジェクトを必要とします.
三、文字型
public static Character valueOf(char c) {
if (c <= 127) { // must cache
return CharacterCache.cache[(int)c];
}
return new Character(c);
}
private static class CharacterCache {
private CharacterCache(){}
static final Character cache[] = new Character[127 + 1];
static {
for (int i = 0; i < cache.length; i++)
cache[i] = new Character((char)i);
}
}
(1)「0」~'127」内の文字は、キャッシュ中に存在する:最初の参照、キャッシュ中のnew 1つのオブジェクト;再度参照すると、キャッシュから直接検索されます.(2)「0」~「127」以外の文字は、毎回new 1つのオブジェクトが表示される.
四、ブール型
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}