byte,即字节,由8位的二进制组成。在Java中,byte类型的数据是8位带符号的二进制数,以二进制补码表示的整数
取值范围:默认值为0,最小值为-128(-27);最大值是127(27-1)
Byte类是byte的包装类,被final修饰,不能被继承,继承了Number类,可以用于数字类型的一系列转换,还实现了Comparable接口,可以用于比较

一、类定义

public final class Byte extends Number implements Comparable<Byte> {}
  • 类被声明为final的,表示不能被继承;
  • 继承了Number抽象类,可以用于数字类型的一系列转换;
  • 实现了Comparable接口,强行对实现它的每个类的对象进行整体排序

二、成员变量

     // byte的最小值,也就是-2的7次方public static final byte   MIN_VALUE = -128;//byte的最大值,也即2的7次方减1public 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值,定义为finalprivate 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;

三、构造器

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

四、内部类

含有静态模块,class加载的时候,执行静态模块,初始化cache[]。

    // Byte对象的缓存类private static class ByteCache {private ByteCache(){}// 缓存数组static final Byte cache[] = new Byte[-(-128) + 127 + 1];// 缓存初始化,范围是-128到127static {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)
    public boolean equals(Object obj) {if (obj instanceof Byte) {return value == ((Byte)obj).byteValue();}return false;}
2、hashCode

重写Object中的hashCode,byte的hashCode就是它的值

    @Overridepublic int hashCode() {return Byte.hashCode(value);}public static int hashCode(byte value) {return (int)value;}
3、toString(byte b)

底层调用Integer.toString,将byte强转为int值在传入一个默认的基数10。

   public static String toString(byte b) {return Integer.toString((int)b, 10);}
4、toString( )

先把byte升级为int,然后用Integer的toString静态方法

  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对象。

    //指定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对象

    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

    public int compareTo(Byte anotherByte) {return compare(this.value, anotherByte.value);}public static int compare(byte x, byte y) {return x - y;}
8、转换方法
    /*** 将指定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。它会报错的

JDK源码解析之 Java.lang.Byte相关推荐

  1. JDK源码解析之 java.lang.Integer

    teger 基本数据类型int 的包装类 Integer 类型的对象包含一个 int 类型的字段 一.类定义 public final class Integer extends Number imp ...

  2. JDK源码解析之 java.lang.Exception

    异常.是所有异常的基类,用于标识一般的程序运行问题.这些问题通常描述一些会被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable public class Exce ...

  3. JDK源码解析之 java.lang.Error

    java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 一.源码部分 //继承了java.lang.Throwable ...

  4. JDK源码解析之 java.lang.Thread

    位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态.上下文切换 ...

  5. JDK源码解析之 Java.lang.String

    String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因 ...

  6. JDK源码解析之 Java.lang.Object

    Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于ja ...

  7. JDK源码解析之 java.lang.System

    一个和系统环境进行交互的类. System不允许被实例化, 而且是一个final类 一.不能实例化 private System() {} 二.成员变量 public final static Inp ...

  8. JDK源码解析之 Java.lang.Compiler

    Compiler类提供支持Java到本机代码编译器和相关服务.在设计上,它作为一个占位符在JIT编译器实现. 一.源码部分 public final class Compiler {private C ...

  9. JDK源码解析之 java.lang.Class

    Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识. 这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class ...

最新文章

  1. 索引系列八--索引特性之有序难优化union
  2. HTTP Host 头攻击
  3. 【第六期】拿不到offer全额退款 人工智能工程师培养计划招生
  4. View和ViewGroup常用方法
  5. [OS复习]进程管理3
  6. JQuery-学习笔记02【基础——JQuery选择器】
  7. GeneralUpdate实现应用程序更新
  8. Eigen(5)Array类和元素级操作
  9. python-requests数据驱动延伸
  10. Windows Server 无法启用 网络发现
  11. php判断支付宝,PHP怎样判断是否为支付宝客户端
  12. 使用树莓派实现微信远程监控
  13. 《第一堂棒球课》:王牌二垒手·棒球4号位
  14. c语言习题集-----收藏归纳版
  15. 零基础学Java语言--第6周编程题
  16. 输入时刻time,计算出在time和time+1之间,时针和分针重合的时刻
  17. Alphapose - Windows下Alphapose(Pytorch 1.1+)版本2021最新环境配置步骤以及踩坑说明
  18. OpenWrt网络配置
  19. 一个女程序员眼中的程序员
  20. 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?

热门文章

  1. java 发送16进制数据'_java 16进制数据递增
  2. shellcraft新姿势
  3. java 正则表达式 table_Java 使用正则表达式
  4. 按条件增加列_12个公式解决Excel按条件多列求和,掌握两、三个就够用了
  5. java se入门_java SE 入门之运算符(第三篇)
  6. linux qtcreator输入中文,新版QT creator下解决fcitx无法输入中文问题(QTcreatorV4.1.0)...
  7. python三引号解析_[宜配屋]听图阁
  8. centos7恢复mysql数据库_mysql数据库恢复过程记录
  9. java 去除 quot,JAVA去除web页面传入后台的特殊字符工具类 | 学步园
  10. 转网口显示未识别的网络_已有1700万用户携号转网 超99%用户1小时内办结