gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:59:10 24 4
gpt4 key购买 nike

Byte byte1=new Byte("10");
Byte byte2=Byte.valueOf("10");

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

byte1 和 byte2 都打印相同的值 10,那么构造函数参数化 Byte 和 valueOf() 方法有什么区别。

最佳答案

source code对于 JDK 7 中的字节类,显示如下:

(我选择了字节版本而不是字符串版本,因为代码更少,但思路是完全一样的)

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

和:

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

字节缓存在哪里:

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) 都只有一个值,但是如果您调用 new Byte(10),那么每次调用 new 都会创建一个新值。由于字节是不可变的(它们没有可更改的状态),因此没有理由为任何给定值创建多个字节。

关于java - Byte 构造函数和 Byte.valueOf() 方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com