Byte底层实现(初级)

Byte类型解析

Byte类型解析

类:public final class Byte extends Number implements Comparable {}

  • final关键字修饰:表示该类为最终类,不能被继承
  • 继承Number类,拥有Number的特征
  • 实现Comparable接口,可以进行比较值大小

属性:

value

语法

private final byte value;
  • 表示Byte包装类的属性值
MIN_VALUE:

语法

public static final byte   MIN_VALUE = -128;
  • byte类型的最小值:-128,-2的7次方
MAX_VALUE:

语法

public static final byte   MAX_VALUE = 127;
  • 最大值:127,2的7次方-1
TYPE

语法

@SuppressWarnings("unchecked")
public static final Class<Byte>     TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");
  • @SuppressWarnings(“unchecked”):取消某些类、属性或者方法的警告
  • 原始类型字节的 Class 实例byte
SIZE

语法

public static final int SIZE = 8;
  • 以二进制补码的方式表示byte的最大位数。
BYTES

语法

public static final int BYTES = SIZE / Byte.SIZE;
  • 用于以二进制补码形式表示字节值的字节数。
  • 该值等于1,表示byte的字节数为1。
serialVersionUID

语法

private static final long serialVersionUID = -7183698231559129828L;
  • 版本变更时,保持序列化与反序列化的兼容性。

内部类(ByteCache)

语法

private static class ByteCache {
    //私有构造方法
    private ByteCache(){}
	
    //静态数组,一个缓冲池,大小为256,(-128):byte最小值,(127):byte最大值
    static final Byte cache[] = new Byte[-(-128) + 127 + 1];

    //静态代码块,设置值,根据cache[]池的长度,进行遍历,添加值
    static {
        for(int i = 0; i < cache.length; i++)
            //比如最大值,255-128=127,所以该数组最大值是127
            //最小值,0-128=-128,所以数组最小值是-128
            cache[i] = new Byte((byte)(i - 128));
    }
}
  • 该类是Byte的缓冲池类,private私有,static静态,说明在Byte类加载的时候,就已经加载该类了
  • 一个私有空参构造方法
  • 一个静态数组,存放byte值的范围[-128~127],
  • 静态代码块用于给数组赋值。
  • **注意:**给byte赋值的时候超过某个范围,编译期间会报错
    • byte b = -128

构造方法

构造方法有两个

1、参数为byte类型

语法

public Byte(byte value) {
    this.value = value;
}
  • 有参构造:参数是byte类型
  • 案例:
byte b = -127;
Byte b1 = new Byte(b);
2、参数为String类型

语法

public Byte(String s) throws NumberFormatException {
    this.value = parseByte(s, 10);
}
  • 有参构造:参数值是字符串
  • 返回值类型是Byte
  • 区分byte,与Byte

方法

parseByte方法
1、参数为String和进制值

语法

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;
}
  • 调用Integer的parseInt方法获取到一个int类型的值
  • 判断当前值是否在byte值范围内
  • 强转为byte返回
2、参数为String
public static byte parseByte(String s) throws NumberFormatException {
    return parseByte(s, 10);
}
  • 调用1中的方法获取byte值
toString()方法
1、参数为byte

语法

public static String toString(byte b) {
    return Integer.toString((int)b, 10);
}
  • 调用Integer的toString方法
  • 参数是将byte转换为int类型
  • 作用:将byte类型的数据,转换为字符串,默认以10进制的方式
2、空参
public String toString() {
    return Integer.toString((int)value);
}
  • 调用Integer的toString方法
  • 空参前提是当前Byte对象是有值的
valueOf方法
1、参数为byte

语法

public static Byte valueOf(byte b) {
    final int offset = 128;
    return ByteCache.cache[(int)b + offset];
}
  • 静态属性偏移量,byteCache的中间值,因为是在byte缓存中取得,所以要加上这个,才可以拿到准确的值
  • ByteCache.cache[(int)b + offset];根据偏移量和具体的值获取到准确的值
  • 不会抛异常,因为在byte的时候就已经规范了它的值大小。
2、参数为String和进制值

语法

public static Byte valueOf(String s, int radix)
    throws NumberFormatException {
    return valueOf(parseByte(s, radix));
}
  • 首先是调用parseByte(s, radix)方法,获取到byte值
  • 然后调用valueof(byte b)方法获取byte值
3、参数为String

语法

public static Byte valueOf(String s) throws NumberFormatException {
    return valueOf(s, 10);
}
  • 调用2的方法获取byte值
decode方法

语法

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);
}
  • 该方法主要是判断0x、0、10进制的字符串,最终返回一个byte值
  • 1、根据参数获取int类型的值
  • 2、判断属于byte值范围
  • 3、调用valueof方法去byte缓存池中获取数据
hashCode方法
1、参数为byte类型

语法

public static int hashCode(byte value) {
    return (int)value;
}
  • 将byte强转为int类型
2、无参
@Override
public int hashCode() {
    return Byte.hashCode(value);
}
  • 调用1的方法获取到hashCode
  • @Override:校验当前方法是不是重写基类的方法
  • 这里重写的Object的hashCode方法。
equals方法

语法

public boolean equals(Object obj) {
    if (obj instanceof Byte) {
        return value == ((Byte)obj).byteValue();
    }
    return false;
}
  • 判断当前obj对象类型是否属于byte类型
    • 是:转换为byte类型,然后进行**"=="**判断,这里判断基本数据类型,只是比较值
    • 否:直接返回false。
compare方法

语法

public static int compare(byte x, byte y) {
    return x - y;
}
  • 返回x-y的值。
compareTo方法

语法

public int compareTo(Byte anotherByte) {
    return compare(this.value, anotherByte.value);
}
  • 调用compare方法
toUnsignedInt方法

语法

public static int toUnsignedInt(byte x) {
    return ((int) x) & 0xff;
}
  • 0x表示:16进制,就是说0x后面的值都要用4位二进制数(0|1)来表示
  • 0xff===11111111127
  • 将参数x转换为int类型,然后与byte最大值求交集
  • 返回值int类型的值
toUnsignedLong方法
public static long toUnsignedLong(byte x) {
    return ((long) x) & 0xffL;
}
  • 将参数x转换为long类型,然后与byte最大值求交集
  • 返回值为long类型
实现Number类的方法
1、byteValue

语法

public byte byteValue() {
        return value;
    }
  • 获取Byte类中的value
2、shortValue

语法

public short shortValue() {
    return (short)value;
}
  • 将Byte类中的value转换为为short类型
3、intvalue

语法

public int intValue() {
    return (int)value;
}
  • 将Byte类中的value转换为为int类型
4、longValue

语法

public long longValue() {
    return (long)value;
}
  • 将Byte类中的value转换为为long类型
5、floatValue

语法

public float floatValue() {
    return (float)value;
}
  • 将Byte类中的value转换为为float类型
6、doubleValue

语法

public double doubleValue() {
    return (double)value;
}
  • 将Byte类中的value转换为为double类型

总结:

Byte类

  • 关键字final
  • 继承Number类
  • 实现Comparable接口

内部类(缓冲池)

  • private static class ByteCache {}
  • 静态、私有方法

属性:

  • MIN_VALUE:byte最小值:-128
  • MAX_VALU:byte最大值:127
  • TYPE:byte类型的class实例
  • value:Byte类的属性
  • SIZE:byte的二进制位数:8bit
  • BYTES:字节数1
  • serialVersionUID:序列号

构造方法:

  • Byte(byte b)
  • Byte(String s)

方法

  • byte parseByte()方法:
    • 根据不同参数类型:获取byte值
  • Byte valueOf(String s, int radix)
    • valueOf方法是根据参数转换为byte之后,去Byte缓冲池寻找值
    • 最后返回
  • hashCode()方法:获取hashCode值
    • 返回值为int类型
  • toString()方法:
    • 调用Integer的方法之后
    • 返回值类型为String
  • 继承Number类的并且实现方法
    • byteValue()
    • shortValue()
    • intValue()
    • longValue()
    • doubleValue()
  • equals方法:
    • 首先判断参数类型是否属于Byte
      • 是:转换为byte(基本数据类型),使用 **==**判断值是否相等
      • 否:返回false
  • compare与compareTo方法:
    • 判断两个值大小,值的大小比较用 x-y
  • toUnsignedInt方法:
    • 通过无符号byte值,转换为int类型,与byte的最大值(二进制数)求交集
    • 返回类型为int
  • toUnsignedLong:
    • 通过无符号byte值,转换为int类型
    • 返回类型为long
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值