パッケージデータクラスのvalueOf()メソッド

14962 ワード

引用する
パッケージ・データ・クラスは直接値を割り当て、デフォルトではそのペアの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);
    }