加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Byte构造函数和Byte.valueOf()方法之间的区别

发布时间:2020-12-15 02:02:15 所属栏目:Java 来源:网络整理
导读:Byte byte1=new Byte("10");Byte byte2=Byte.valueOf("10");System.out.println(byte1);System.out.println(byte2); byte1和byte2都打印相同的值10.然后构造函数参数化的Byte和valueOf()方法之间有什么区别. 解决方法 JDK 7中的字节类 source code显示了这一
Byte byte1=new Byte("10");
Byte byte2=Byte.valueOf("10");

System.out.println(byte1);
System.out.println(byte2);

byte1和byte2都打印相同的值10.然后构造函数参数化的Byte和valueOf()方法之间有什么区别.

解决方法

JDK 7中的字节类 source code显示了这一点:

(我选择了字节版本而不是String版本,因为代码较少,但想法完全相同)

public static Byte valueOf(byte b) 
{
    final int offset = 128;
    return ByteCache.cache[(int)b + offset];
}

和:

public Byte(byte value) 
{
   this.value = value;
}

ByteCache的位置是:

private static class ByteCache 
{
    private ByteCache(){}

    static final Byte cache[] = new Byte[-(-128) + 127 + 1];

    static 
    {
        for(int i = 0; i < cache.length; i++)
            cache[i] = new Byte((byte)(i - 128));
    }
}

基本上构造函数版本用于创建一个全新的版本,而valueOf版本返回一个预先存在的版本.这节省了内存,因为Byte.valueOf(10)只有一个值,无论您调用它的次数如何,但如果您执行新的Byte(10),则会为每次调用new创建一个新值.由于字节是不可变的(它们没有可变状态),因此没有理由为任何给定值创建多个字节.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读