概述
Byte类型包裹了一个基本类型byte,一个Byte对象一定包含了一个类型是byte的成员属性,这里最为惊讶的地方,是Byte竟然是继承自Number,之前对这个认识不足。
继承关系
public final class Byte extends Number implements Comparable 继承自 Number 实现了 Comparable 接口
成员属性
public static final byte MIN_VALUE = -128;
这是一个byte数据类型的最小值
public static final byte MAX_VALUE = 127;
这是一个byte数据类型的最大值
public static final Class TYPE = (Class) Class.getPrimitiveClass("byte");
返回对应的基本类型的名称,即所有的Boolean对象的基本类型都是“byte”。
private final byte value;
存储了Boolean对象的值
public static final int SIZE = 8;
一个byte默认用8位存储。
public static final int BYTES = SIZE / Byte.SIZE;
一个byte对象占据的字节数。默认是1。
构造器
public Byte(byte value) {
this.value = value;
}
public Byte(String s) throws NumberFormatException {
this.value = parseByte(s, 10);
}
关键方法
+ valueOf()
返回对应的Byte值
public static Byte valueOf(byte b) {
final int offset = 128;
return ByteCache.cache[(int)b + offset];
}
+ parseByte()
转化为数字(按照指定的进制),然后转化为byte,如果超出byte的数据范围,抛出异常。
public static byte parseByte(String s, int radix)
throws NumberFormatException {
int i = Integer.parseInt(s, radix);
if (i < MIN_VALUE || i > MAX_VALUE)
throw new NumberFormatException(
"Value out of range. Value:\"" + s + "\" Radix:" + radix);
return (byte)i;
}
public static byte parseByte(String s) { ... }// 进制默认为10进制。
+ valueOf()
按照指定的进制,转化为Byte
public static Byte valueOf(String s, int radix) throws NumberFormatException { ... }
重载方法,默认采用10进制
public static Byte valueOf(String s) throws NumberFormatException {
return valueOf(s, 10);
}
+ decode()
解码为Byte
public static Byte decode(String nm) throws NumberFormatException {
int i = Integer.decode(nm);
if (i < MIN_VALUE || i > MAX_VALUE)
throw new NumberFormatException(
"Value " + i + " out of range from input " + nm);
return valueOf((byte)i);
}
+ byteValue()
将当前Byte,转化为byte值,值
public byte byteValue() {
return value;
}
此外还有shortValue(),intValue(),longValue(),floatValue(),doubleValue()等类似方法。
+ equals()
当目标对象是一个Byte,并且和当前Byte对象的值也相等的时候,返回true,否则返回false。
public boolean equals(Object obj) {
if (obj instanceof Byte) {
return value == ((Byte)obj).byteValue();
}
return false;
}
+ compareTo()
当前Byte对象和另一个Byte对象比较,返回值是 当前Byte - 参数Byte。
public int compareTo(Byte anotherByte) {
return compare(this.value, anotherByte.value);
}
+ compare()
两个 byte 对象比较,返回差值。
public static int compare(byte x, byte y) {
return x - y;
}
内部类
对所有byte值进行了缓存,需要某个byte值的时候,直接从已经创建的Byte中获取。而不需要新建对象,带来系统开销。
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));
}
}
实现原理
该类比较重要的一点是,定义了一个内部类,并且存储了所有的byte值。这种做法是为了避免频繁新建和销毁对象带来的额外系统开销。
希望和大家多多交流
我16年毕业以后,做的是前端,目前打算深入学习java开发。内容有任何问题,欢迎各位小伙伴们指正,也希望小伙伴们给我点赞和关注,给我留言,一起交流讨论,共同进步。