[Javaソースコード]バイト

今回は見とりByteに基づいて、クラスのソースコードをjdk1.8.0_181.jdkバージョン。

概要

Java Byte主にクラスbyte1つのフィールドに格納されているに対応する基本データ型のカプセル化、byteデータ値は、この方法は、さらにためにいくつかの利便性を提供しbyte、関連する動作を行います。

クラス定義

public final class Byte extends Number implements Comparable<Byte>
复制代码

Byteキーワードとクラスfinalされ、継承されない継承することに加えて、Number実装するクラスComparableインターフェースは、つまり、比較することができます。

プロパティ

public static final byte   MIN_VALUE = -128;

public static final byte   MAX_VALUE = 127;
复制代码

定義するByteために、補体の大きさの範囲を、必要に応じて、それよりも負の数正数もう一つのMIN_VALUE値を取ることができ-2**8、そしてMAX_VALUE値を取ることができ2**8 - 1、ロジックは、特定のとコードを補完する、を参照することができ、元のコードは、抗コード、補数、アプリケーション、およびどのような長所と短所生産?-知っているほとんどのユーザーの答え-ほとんど知っている、個人的には良い感じに説明します。

public static final int SIZE = 8;
复制代码

それが定義されbyte、2の補数形式の値のbitビットを、8が固定されています。

public static final int BYTES = SIZE / Byte.SIZE;
复制代码

定義byte2の補数形式のバイト数を、値が、計算された値が固定されています。

@SuppressWarnings("unchecked")
public static final Class<Byte>     TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");
复制代码

取得Byteカテゴリ情報をByte.TYPE == byte.class、彼らは同じです。

private final byte value;
复制代码

Byteのでbyte、包装なので、ここでは、対応する含まれているbyteデータの基本型の変数を。

private static final long serialVersionUID = -7183698231559129828L;
复制代码

内部クラス

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));
  }
}
复制代码

これは、静的なネストされたクラスは、サイズの内部配列を定義定義-(-128)+127+1=256-128と127の間の値を含みます。静的なブロックは、値の配列を初期化します。ここでの知識ポイント、Javaクラス・ロード・シーケンス、追加静态变量/代码块 -> 非静态变量/代码块 -> 构造方法のコードの順序に従ってロードされているのと同じ部分を、詳細な内容は、自分自身の学習を検索することができます。

クラス内の命令について、あなたは公式ドキュメントを参照することができた入れ子のクラスの学習をさらに理解するために。

方法

コンストラクタ

public Byte(byte value) {
  this.value = value;
}

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

复制代码

対応する二つの工法、着信の有無byte値は、Aは、着信ストリングの構文解析では、以下の分析方法に対応し、(このメソッドは例外をスローすることがあります、それはプロセスを留意されたい)整数処理を10進数に変換導入。

parseByte方法

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

复制代码

受信文字列と16進数は、呼び出しInteger.parseInt範囲かどうかを決定するために整数、変換された整数を取得する方法をByte範囲。もしそうなら、キャストbyte戻り値の型を;、投げないNumberFormatException例外を。

public static byte parseByte(String s) throws NumberFormatException {
  return parseByte(s, 10);
}

复制代码

ワンパラメータの存在parseByte方法は、上記の方法は、小数10のデフォルト番号を呼び出すことによって実現されます。

toStringメソッド

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

public String toString() {
  return Integer.toString((int)value);
}

复制代码

ダイレクトbyteキャストへの型の値はint、その後、呼び出しInteger.toString操作の方法を。

valueOfメソッド

public static Byte valueOf(byte b) {
  final int offset = 128;
  return ByteCache.cache[(int)b + offset];
}

复制代码

ためのbyte型パラメータ、直接オフセット計算、読み出しByteCache対応する空間と時間のパフォーマンスを向上させるためにクラス内で動作するようにアレイの値に対応する静的変数。

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

复制代码

これらの2つの方法があるためstring、パラメータの種類、問題にのみ設定進です。使用parseByte方法に文字列を変換するためのbyte型の値、及び、直接最初の使用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);
}

复制代码

文字列をデコードするために文字列を変換Byteタイプ値。メインロジックを呼び出しInteger.decodeデコードされたデジタルを得るための方法を、その後、対応するリターンか否かを判断するbyte要件は、呼がvalueOf最終的な結果を返します。

削除+/-シンボルを、特定の状況に応じてデコードされますが、デフォルトでは小数点として扱われます。0x,0X,#進の始まりとして扱われ、0初めは進として扱われます。

xxxValue方法

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

复制代码

キャストすることで、元の値の型の範囲を拡大し、結果を返します。

hashCode 方法

@Override
public int hashCode() {
  return Byte.hashCode(value);
}

public static int hashCode(byte value) {
  return (int)value;
}

复制代码

対応する直接返すintハッシュコードとして、値のタイプ。

equalsメソッドを

public boolean equals(Object obj) {
  if (obj instanceof Byte) {
    return value == ((Byte)obj).byteValue();
  }
  return false;
}

复制代码

まず、objが渡されたパラメータ決定されていないByte両方の比較値の場合は、同じインスタンスであるである、そうでない場合、直接返しますfalseここから見ることができ、我々は、使用中のパラメータを渡す必要はありませんnull == obj判断して無視することができます。

方法を比較

public static int compare(byte x, byte y) {
  return x - y;
}

复制代码

xが、yが負返し未満でxがyに等しい場合に0を返す場合、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;
}

复制代码

byte変換符号なし整数。xはにキャストintすることにより、値を入力0xff下位8ビット値、ゼロに設定さ上位24ビットを保持し、ビット演算。全体的な結果は、番号0およびn **は、負の値は、元の8 + 2に等しい、同じままです。

toUnsignedLong方法

public static long toUnsignedLong(byte x) {
  return ((long) x) & 0xffL;
}

复制代码

手順は、上記のようにだけであるlong64ビット、下位8ビットがアサートされ、高い56セット0。

概要

ソースコードを読み取ることにより見出され、Byte広範な使用のクラスIntegerメソッドのは、内部クラスの付加的な使用は、論理最適化の一定量のためなどの操作を、ビット。自分のロード順序内部クラスを探している過程で、燃料に引き続き、またクラスの詳細を学んだ、補完!

遂に

アドレス対応ブログ:blog.renyijiu.com/post/javaソース...

おすすめ

転載: juejin.im/post/5d63b521f265da03b638b99f