您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/6/26 2:44:05发布29次查看
今天来剖析一下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 = 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; }
这些是强制类型转换的一些方法,特变简单,但是还是写上了
@override public int hashcode() { return byte.hashcode(value); } public static int hashcode(byte value) { return (int)value; }
第一个hashcode是重写了object的hasncode方法,用于两个值进行比较,hashcode方法经常和equals方法进行区别,尤其是面试的时候,这个现在不详细讲解,hashcode方法大多被用在集合那一块
public boolean equals(object obj) { if (obj instanceof byte) { return value == ((byte)obj).bytevalue(); } return false; }
equals方法,现在是进行值得比较。
public int compareto(byte anotherbyte) { return compare(this.value, anotherbyte.value); } public static int compare(byte x, byte y) { return x - y; }
比较方法,如果x > y,返回一个正数,如果x = y,返回0。如果x < y,返回负数
public static int tounsignedint(byte x) { return ((int) x) & 0xff; } public static long tounsignedlong(byte x) { return ((long) x) & 0xffl; }
将byte类型转换为无符号的int类型和long类型
private static final long serialversionuid = -7183698231559129828l;
序列化的时候用到的,现在不多讲解,我也搞不太明白序列化的过程。。。。
相关文章:
java int转byte和long转byte
解析java 中的buffer源码
以上就是详细解析java中byte类的源码--步骤详情的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product