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
- 首先判断参数类型是否属于Byte
- compare与compareTo方法:
- 判断两个值大小,值的大小比较用 x-y
- toUnsignedInt方法:
- 通过无符号byte值,转换为int类型,与byte的最大值(二进制数)求交集
- 返回类型为int
- toUnsignedLong:
-
- 通过无符号byte值,转换为int类型
- 返回类型为long