美文网首页
7 java.lang.Byte

7 java.lang.Byte

作者: 十丈_红尘 | 来源:发表于2018-09-22 21:22 被阅读0次

1️⃣类定义

public final class Byte extends Number implements Comparable<Byte>
  1. 类被声明为final的,表示不能被继承;
  2. 继承了Number抽象类,可以用于数字类型的一系列转换;
  3. 实现了Comparable接口,可以用于比较

2️⃣属性

    /**
     * byte的最小值,也就是-2的7次方
     */
    public static final byte   MIN_VALUE = -128;

    /**
     * byte的最大值,也即2的7次方减1
     */
    public static final byte   MAX_VALUE = 127;
    
    /**
     * @SuppressWarnings("unchecked")表示对警告保持静默 
     * 获取Byte的原始class对象
     */
    @SuppressWarnings("unchecked")
    public static final Class<Byte> TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");

    /**
     * Byte对象中具体的byte值,定义为final
     */
    private final byte value;
    
    /**
     * 用于表示二进制补码二进制形式的字节值的位数(定义了Byte的大小,为8个位,即一个字节)
     */
    public static final int SIZE = 8;

    /**
     * 用于表示二进制补码二进制形式的字节值的字节数(给出了字节,即SIZE/Byte.SIZE = 1;占一个字节)
     */
    public static final int BYTES = SIZE / Byte.SIZE;

    /**  
     * 序列化
     */
    private static final long serialVersionUID = -7183698231559129828L;

3️⃣构造器

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

    /**
     * 参数为字符串形式传入的value必须是byte类型的值,字符串s必须是可以转换为数字的字符串,不然会报错
     */
    public Byte(String s) throws NumberFormatException {
        this.value = parseByte(s, 10);
    }

4️⃣内部类

    /**
     * Byte对象的缓存类
     */
    private static class ByteCache {
        private ByteCache(){}
        /**
         * 缓存数组
         */
        static final Byte cache[] = new Byte[-(-128) + 127 + 1];
        // 缓存初始化,范围是-128到127
        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Byte((byte)(i - 128));
        }
    }

定义了一个Byte的缓存值,将-128~127写入到一个cache数组,当在这个区间的时候,JVM会直接使用缓存值,但是当超过这个区间的话,会发生溢出的现象,128会变为-128,会从最小值继续循环计算


5️⃣方法

① toString : 注意两次toString调用的Integer.toString()方法不是一个toString();

    /**
     * 静态toString,底层调用Integer.toString(也是一个静态方法)
     * 将byte强转为int值在传入一个默认的基数10()
     */
    public static String toString(byte b) {
        return Integer.toString((int)b, 10);
    }

    /**
     * 这里是先把byte升级为int,然后用Integer的toString静态方法
     */
    public String toString() {
        return Integer.toString((int)value);
    }

② valueOf

    /**
     * 封装基础byte到Byte对象,其实就是从缓存数组中取出对应的值
     * 在这里使用到了上边定义的内部类
     */
    public static Byte valueOf(byte b) {
        final int offset = 128;
        return ByteCache.cache[(int)b + offset];
    }
    
    /**
     * 重载方法 : 将字符串根据指定的基数包装成Byte对象
     */
    public static Byte valueOf(String s, int radix)
        throws NumberFormatException {
        return valueOf(parseByte(s, radix));
    }
    
    /**
     * 重载方法 : 将字符串根据十进制包装成Byte对象实际调用的是valueOf(String s, int radix)
     * 这个重载方法,默认的基数为10
     */
    public static Byte valueOf(String s) throws NumberFormatException {
        return valueOf(s, 10);
    }

③ parseByte

    /**
     * 将字符串根据指定的基数格式化成基础byte,字符串可以包含数组和字母基数最大为36;
     * 另外需要注意的是这个方法将在源码中被多次调用
     */
    public static byte parseByte(String s, int radix)
        throws NumberFormatException {
        // 调用了Integer的格式化方法
        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;
    }
    
    /**
     * 重载的方法实际调用的是parseByte(String s, int radix),传入的基数默认为10
     */
    public static byte parseByte(String s) throws NumberFormatException {
        return parseByte(s, 10);
    }

④ decode

    /**
     * 将2进制或者是8进制或者是16进制的字符串转成封装成Byte对象
     */
    public static Byte decode(String nm) throws NumberFormatException {
        // 调用Integer.decode()进行处理
        int i = Integer.decode(nm);
        if (i < MIN_VALUE || i > MAX_VALUE)
            throw new NumberFormatException(
                    "Value " + i + " out of range from input " + nm);
        // 将处理结果的值进行强转调用valueOf(byte b);
        return valueOf((byte)i);
    }

⑤ 来自于继承类的方法

    /**
     * 获取Byte对象的byte值,继承自Number方法
     */
    public byte byteValue() {
        return value;
    }

    /**
     * 将当前对象强转成short,继承自Number方法
     */
    public short shortValue() {
        return (short) value;
    }

    /**
     * 将当前对象强转成int,继承自Number方法
     */
    public int intValue() {
        return (int) value;
    }

    /**
     * 将当前对象强转成long,继承自Number方法
     */
    public long longValue() {
        return (long) value;
    }

    /**
     * 将当前对象强转成float,继承自Number方法
     */
    public float floatValue() {
        return (float) value;
    }

    /**
     * 将当前对象强转成double,继承自Number方法
     */
    public double doubleValue() {
        return (double) value;
    }

⑥ hashCode

    /**
     * 重写Object中的hashCode,实际调用的是hashCode(byte value)
     */
    @Override
    public int hashCode() {
        return Byte.hashCode(value);
    }

    /**
     * hashCode,静态,byte的hashCode就是它的值
     */
    public static int hashCode(byte value) {
        return (int)value;
    }

⑦ equals : 这个方法就不进行过多的介绍了,实际就行进行类型以及值的判断

    public boolean equals(Object obj) {
        if (obj instanceof Byte) {
            return value == ((Byte)obj).byteValue();
        }
        return false;
    }

⑧ compareTo与compare

    /**
     * 比较当前对象与指定Byte,实际调用的是compare(byte x, byte y) 
     */
    public int compareTo(Byte anotherByte) {
        return compare(this.value, anotherByte.value);
    }

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

⑨ 转换方法

    /**
     * 将指定byte转换为无符号int
     */
    public static int toUnsignedInt(byte x) {
        return ((int) x) & 0xff;
    }

    /**
     * 将指定byte专为无符号long
     */
    public static long toUnsignedLong(byte x) {
        return ((long) x) & 0xffL;
    }

6️⃣总结

  1. 声明了一个ByteCache内部类用来作为Byte的缓存值
  2. parseByte(String s, int radix)方法的两个参数,radix参数代表基数radix传入的是几,s就是几进制数,解析完结果是十进制数
  3. 定义了SIZE和BYTES两个常量来value的字节数和位数;

相关文章

  • 7 java.lang.Byte

    1️⃣类定义 类被声明为final的,表示不能被继承;继承了Number抽象类,可以用于数字类型的一系列转换;实现...

  • java 读取hive报错java.lang.Byte cann

    spark Core 读hive 表数据 遇到 的问题: 当hive 的字段类型为 tinyint 时, 报错: ...

  • 【第三周检视】2017.06.04—2017.06.10

    一、一周好习惯 早起7∕7,早睡7∕7,走步6∕7,冥想7∕7,八段锦5∕7,群里打卡7∕7,英语7∕7,读书群7...

  • 易效能时间管理8组小组会议第十周

    打卡统计:许丽钦 7/7;刘佼佼7/7;佟创5/7;万森7/7;乐天6/7;绍斌4/7;黎钦财7/7; 本周学习收...

  • 7/7

    我不能夸口说精神分析从来不做琐碎的事情,事实恰恰相反,精神分析所观察的材料常被其他科学讥讽为是琐碎、平凡和不重要的...

  • 7、7

    改变能改变的 接受不能改变的 颓废也是一种精神状态 乐于接受也不能不说是一种享受 哈哈、还年轻、怕什么

  • 7/7

    周五了,明天终于不用早起了。明天要去看爸妈,要去图书馆还书,要去新家。

  • 7/7

    无人与我立黄昏 无人问我粥可温 无人与我捻熄灯 无人共我书半生 无人陪我夜已深 无人与我把酒分 无人拭我相思泪 无...

  • 7/7

    数学 看到多元函数 直接懵逼 计算量好大 要多练,之前的也需要总结,全书第一轮还是很吃力。 专业课 越来越喜欢了 没道理

  • 7/7

    高情商并不是左右逢源、圆滑客套,而是温暖、真诚,换位思考。找台阶下,让人舒适体面。 不随意评价他人,发个自拍,他说...

网友评论

      本文标题:7 java.lang.Byte

      本文链接:https://www.haomeiwen.com/subject/llvxoftx.html