A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如果不需要新的 Character 实例,则通常应该优先采用此方法,而不是构造方法 Character(char),因为该方法很可能通过缓存经常请求的值来显著提高空间和时间性能。   

public static Character valueOf(char c) {
        if(c <= 127) { // must cache
            return CharacterCache.cache[(int)c];
        }
        return new Character(c);
    }


catche是这样的
static final Character cache[] = new Character[127 + 1];
        static {
            for(int i = 0; i < cache.length; i++)
                cache = new Character((char)i);
        }

文档的解释是下面的!既然传递进来了一个 c 那么 他的数值范围肯定是<127的了,源码中的return new Character(c)还会执行吗?java允许废话吗?
catche是static final的也就是说内存中肯定存在了各个char对应的Character  啊?


/**
     * Returns a <tt>Character</tt> instance representing the specified
     * <tt>char</tt> value.
     * If a new <tt>Character</tt> instance is not required, this method
     * should generally be used in preference to the constructor
     * {@link #Character(char)}, as this method is likely to yield
     * significantly better space and time performance by caching
     * frequently requested values.
     *
     * @param  c a char value.
     * @return a <tt>Character</tt> instance representing <tt>c</tt>.
     * @since  1.5
     */


另外看了下Integer的也是这样写的,Float也一样,也是说缓存机制,但是Float的方法确没有这么实现,而是直接用的return 实例。
public static Integer valueOf(int i) {//源码有cache
        if(i >= -128 && i <= IntegerCache.high)
            return IntegerCache.cache[i + 128];
        else
            return new Integer(i);
    }


public static Float valueOf(float f) {//不是说缓存吗?哪呢?
        return new Float(f);
    }

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
为什么缓存经常请求的值来显著提高空间和时间性能。   
回复 使用道具 举报
无人回答哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马