美文网首页
Java中new Long()和Long.valueOf()区别

Java中new Long()和Long.valueOf()区别

作者: zlup | 来源:发表于2017-10-27 09:58 被阅读0次

    在项目Code Review的时候,遇到了获取Long对象的两种方式:

    • new Long()
    • Long.valueOf()

    那么,这两种方式到底有什么区别呢?下面通过查看JDK(1.8)源代码来分析两者之间的区别。

    源码中Long类有两个构造函数:

    public Long(long value) {
        this.value = value;
    }
    
     public Long(String s) throws NumberFormatException {
        this.value = parseLong(s, 10);
    }
    

    再看下Long.valueOf()相关的源代码:

    public static Long valueOf(String s) throws NumberFormatException
    {
        return Long.valueOf(parseLong(s, 10));
    }
    
    
    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);
    }
    

    如果我们去转化一个字符串为Long对象,使用new Long()Long.valueOf()都会去调用parseLong()这个方法。从这一步来说,二者没有区别。区别发生在当parseLong()返回一个long基本类型时,使用new Long()方式时,该long值直接赋值给成员变量;当使用Long.valueOf()时,该long值由上面的public static Long valueOf(long I)来处理。从该方法的代码实现细节可以看到,当值在[-128,127]之间时,返回的是缓存中的值。从这一点来说,如果值在[-128,127]之间时,Long.valueOf()要比new Long()更快更节省内存空间。

    在没有特殊要求情况下,尽量的使用Long.valueOf()

    相关文章

      网友评论

          本文标题:Java中new Long()和Long.valueOf()区别

          本文链接:https://www.haomeiwen.com/subject/psqrpxtx.html