• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详细解析java中Byte类的源码–步骤详情

java 搞代码 4年前 (2022-01-09) 33次浏览 已收录 0个评论

今天来剖析一下java.lang.Byte类的源码,直奔主题

首先

public final class Byte extends Number implements Comparable<Byte> {public static final byte   MIN_VALUE = -128;public static final byte   MAX_VALUE = 127;public static final int SIZE = 8;public static final int BYTES = SIZE / Byte.SIZE;    @SuppressWarnings("unchecked")    public static final Class<Byte>     TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");

第一句Byte类被final修饰,不能被继承,继承了Number类,可以用于数字类型的一系列转换实现了Comparable接口,可以用于比较
第二句和第三句定义了最小值和最大值
第四句定义了Byte的大小,为8个位,即一个字节
第五句给出了字节,即SIZE/Byte.SIZE = 1;占一个字节
被注解为对警告保持静默的这句话是获取该类的原始类

    public Byte(byte value) {        this.value = value;    }    public Byte(String s) throws NumberFormatException {        this.value = parseByte(s, 10);    }

Byte类的两个构造器,这里有限制,传入的value必须是byte类型的值,字符串s必须是可以转换为数字的字符串,不然会报错

    public static String toString(byte b) {        return Integer.toString((int)b, 10);    }    public String toString() {        return Integer.toString((int)value);    }    private static class ByteCache {        private ByteCache(){}        static final Byte cache[] = new Byte[-(-128) + 127 + 1];        static {            for(int i = <div style="color:transparent">本文来源gaodai^.ma#com搞#代!码网</div>0; i < cache.length; i++)                cache[i] = new Byte((byte)(i - 128));        }    }
  • 接下来是toString方法,将byte类型转换为字符串,里面用到了Integer类中的方法

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

parseByte将字符串类型解析为byte类型,radix是基数,radix是几,s就是几进制数,解析完结果是十进制数

    public static Byte valueOf(byte b) {        final int offset = 128;        return ByteCache.cache[(int)b + offset];    }    public static Byte valueOf(String s, int radix)        throws NumberFormatException {        return valueOf(parseByte(s, radix));    }    public static Byte valueOf(String s) throws NumberFormatException {        return valueOf(s, 10);    }

将传入参数的值转换为Byte类型,这里就是直接从缓存里面取,挂参数radix的方法是先将字符串解析成十进制然后再进行valueOf

    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);    }

这是一个解码转码方法,以前的方法不是这样写的,现在是直接调用了Integer类的decode方法,然后再判断是否小于最小值或者大于最大值,然后再转换成byte类型返回,这下子真的应了那句话“java里面不存在byte类型”了

    public byte byteValue() {        return value;    }    public short shortValue() {        return (short)value;    }    public int intValue() {        return (int)value;    }    public long longValue() {        return (long)value;    }    public float floatValue() {        return (float)value;    }    public double doubleValue() {        return (double)value;    }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详细解析java中Byte类的源码–步骤详情

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址