Byte源码解析

说明:

Byte类在一个对象中包含一个基本类型byte的值。 类型为Byte的对象包含一个单一字段,其类型为byte 。此外,该类还提供了一些将byte转换为String和String转换为byte ,以及在处理byte时有用的其他常量和方法。

类图结构:
在这里插入图片描述

源码解析

public final class Byte extends Number implements Comparable<Byte> {

/**
* byte 数据类型是8位、有符号的,以二进制补码表示的整数:最小值  -2^7
 */
public static final byte   MIN_VALUE = -128;

/**
* byte 数据类型是8位、有符号的,以二进制补码表示的整数:最大值 2^7-1。 
 */
public static final byte   MAX_VALUE = 127;

/**
 * The {@code Class} instance representing the primitive type
 * {@code byte}.
 */
@SuppressWarnings("unchecked")
public static final Class<Byte>     TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");

/**
 * 返回一个新的 String对象,代表指定的 byte 。
 */
public static String toString(byte b) {
    return Integer.toString((int)b, 10);
}

/**
 * ByteCache 是Byte的一个内部类,它包含了byte可能值的Byte数组,范围是[-128,127],并将这范围内的256个值缓存起来。
 */
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值转化成包装类型Byte
 */
public static Byte valueOf(byte b) {
    final int offset = 128;
    return ByteCache.cache[(int)b + offset];
}

/**  
 * 将字符串参数解析为第二个参数指定的基数中的带符号的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;
}

/**
 * 将字符串参数解析为带符号的十进制byte。
 */
public static byte parseByte(String s) throws NumberFormatException {
    return parseByte(s, 10);
}

/**
 * 返回一个 Byte对象,该对象保存从指定的String中 String的值,并使用第二个参数给出的基数进行解析。
 */
public static Byte valueOf(String s, int radix)
    throws NumberFormatException {
    return valueOf(parseByte(s, radix));
}

/**
 * 返回一个 Byte物体保持由指定的给定的值String 。
 */
public static Byte valueOf(String s) throws NumberFormatException {
    return valueOf(s, 10);
}

/**
 * 将 String解码成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);
}


private final byte value;

/**
 * 构造一个新分配的 Byte对象,该对象表示指定的 byte值。
 */
public Byte(byte value) {
    this.value = value;
}

/**
 * 构造一个新分配 Byte对象,表示 byte由指示值 String参数。
 */
public Byte(String s) throws NumberFormatException {
    this.value = parseByte(s, 10);
}

/**
 * 将 Byte的值作为byte。
 */
public byte byteValue() {
    return value;
}

/**
 * 返回当前Byte对象对应的byte强转成short。
 */
public short shortValue() {
    return (short)value;
}

/**
 * 返回当前Byte对象对应的byte强转成int。
 */
public int intValue() {
    return (int)value;
}

/**
 * 返回当前Byte对象对应的byte强转成long。
 */
public long longValue() {
    return (long)value;
}

 /**
 * 返回当前Byte对象对应的byte强转成float。
 */
public float floatValue() {
    return (float)value;
}

/**
 * 返回当前Byte对象对应的byte强转成double。
 */
public double doubleValue() {
    return (double)value;
}

public String toString() {
    return Integer.toString((int)value);
}

/**
 * 返回这个Byte的哈希码; 等于调用intValue()的结果。
 */
@Override
public int hashCode() {
    return Byte.hashCode(value);
}

/**
 * 返回一个byte值的哈希码; 兼容Byte.hashCode() 。
 */
public static int hashCode(byte value) {
    return (int)value;
}

/**
 * 将此对象与指定的对象进行比较。
 */
public boolean equals(Object obj) {
    if (obj instanceof Byte) {
        return value == ((Byte)obj).byteValue();
    }
    return false;
}

/**
 * 数字比较两个 Byte对象。
 */
public int compareTo(Byte anotherByte) {
    return compare(this.value, anotherByte.value);
}

/**
 * 数值比较两个byte值。
 */
public static int compare(byte x, byte y) {
    return x - y;
}

/**
 * 将byte x转成无符号整型。先将x转化成int,再和0xffL按位与,如何x是证书,则取x本身;如果是负数,则取它与最低8位的值。
 * @since 1.8
 */
public static int toUnsignedInt(byte x) {
    return ((int) x) & 0xff;
}

/**
 * 将byte x转成无符号long型。
 * @since 1.8
 */
public static long toUnsignedLong(byte x) {
// 先将x转化成int,再和0xffL按位与,如何x是证书,则取x本身;如果是负数,则取它与最低8位的值。
    return ((long) x) & 0xffL;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值