byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数 取值范围:默认值为0,最小值为-128(-27);最大值是127(27-1) Byte类是byte的包装类,被final修饰,不能被继承,继承了Number类,可以用于数字类型的一系列转换,还实现了Comparable接口,可以用于比较
一、类定义
代码语言:javascript复制public final class Byte extends Number implements Comparable<Byte> {}
- 类被声明为final的,表示不能被继承;
- 继承了Number抽象类,可以用于数字类型的一系列转换;
- 实现了Comparable接口,强行对实现它的每个类的对象进行整体排序
二、成员变量
代码语言:javascript复制 // 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;
三、构造器
代码语言:javascript复制 public Byte(byte value) {
this.value = value;
}
//参数为字符串形式传入的value必须是byte类型的值,字符串s必须是可以转换为数字的字符串,不然会报错
public Byte(String s) throws NumberFormatException {
this.value = parseByte(s, 10);
}
四、内部类
含有静态模块,class加载的时候,执行静态模块,初始化cache[]。
代码语言:javascript复制 // 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,会从最小值继续循环计算
五、普通方法
1、equals (Object obj)
代码语言:javascript复制 public boolean equals(Object obj) {
if (obj instanceof Byte) {
return value == ((Byte)obj).byteValue();
}
return false;
}
2、hashCode
重写Object中的hashCode,byte的hashCode就是它的值
代码语言:javascript复制 @Override
public int hashCode() {
return Byte.hashCode(value);
}
public static int hashCode(byte value) {
return (int)value;
}
3、toString(byte b)
底层调用Integer.toString,将byte强转为int值在传入一个默认的基数10。
代码语言:javascript复制 public static String toString(byte b) {
return Integer.toString((int)b, 10);
}
4、toString( )
先把byte升级为int,然后用Integer的toString静态方法
代码语言:javascript复制 public String toString() {
return Integer.toString((int)value);
}
5、 valueOf()
观察这几个方法,public static Byte valueOf(byte b)和public static byte parseByte(String s, int radix)是核心。第2个方法转换为byte;第一个方法转换为Byte,Byte根据byte的值,从缓存中获取Byte对象。
代码语言:javascript复制 //指定byte值,返回Byte表示的实例 。
public static Byte valueOf(byte b) {
final int offset = 128;
return ByteCache.cache[(int)b offset];
}
//,该对象保存String使用第二个参数给出的基数(计算机进制)解析时从指定的值中提取的值。
public static Byte valueOf(String s, int radix)
throws NumberFormatException {
return valueOf(parseByte(s, radix));
}
//使用s构造一个新的Byte对象,s为byte范围内的整数。
public static Byte valueOf(String s) throws NumberFormatException {
return valueOf(s, 10);
}
6、decode()
将2进制或者是8进制或者是16进制的字符串转成封装成Byte对象
代码语言:javascript复制 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);
}
7、 compareTo与compare
compareTo 比较当前对象与指定Byte,实际调用的是compare(byte x, byte y) 比较两个byte
代码语言:javascript复制 public int compareTo(Byte anotherByte) {
return compare(this.value, anotherByte.value);
}
public static int compare(byte x, byte y) {
return x - y;
}
8、转换方法
代码语言:javascript复制 /**
* 将指定byte转换为无符号int
*/
public static int toUnsignedInt(byte x) {
return ((int) x) & 0xff;
}
/**
* 将指定byte专为无符号long
*/
public static long toUnsignedLong(byte x) {
return ((long) x) & 0xffL;
}
六、总结
Byte是java.lang中的一个类,目的是为基本数据类型byte进行封装。
Byte是byte的包装类,就如同Integer和int的关系,
一般情况包装类用于泛型或提供静态方法,用于基本类型或字符串之间转换,建议尽量不要用包装类和基本类型之间运算,因为这样运算效率会很差的
6.1、类封装的好处
- Byte可以将对象的引用传递,使得多个function共同操作一个byte类型的数据,而byte基本数据类型是赋值之后要在stack(栈区域)进行存储的;
- 在java中包装类,比较多的用途是用在于各种数据类型的转化中。 比如,现在byte要转为String
byte a=0;
String result=Integer.toString(a);
- 使用泛型时
List<Integer> nums;
这里<>需要的类。如果你用int。它会报错的