今回は見とりByte
に基づいて、クラスのソースコードをjdk1.8.0_181.jdkバージョン。
概要
Java Byte
主にクラスbyte
1つのフィールドに格納されているに対応する基本データ型のカプセル化、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;
复制代码
定義byte
2の補数形式のバイト数を、値が、計算された値が固定されています。
@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;
}
复制代码
手順は、上記のようにだけであるlong
64ビット、下位8ビットがアサートされ、高い56セット0。
概要
ソースコードを読み取ることにより見出され、Byte
広範な使用のクラスInteger
メソッドのは、内部クラスの付加的な使用は、論理最適化の一定量のためなどの操作を、ビット。自分のロード順序内部クラスを探している過程で、燃料に引き続き、またクラスの詳細を学んだ、補完!
遂に
アドレス対応ブログ:blog.renyijiu.com/post/javaソース...