오늘은 java.lang.Byte 클래스의 소스코드를 분석해서 바로 본론으로 들어가겠습니다.
우선
public final class Byte extends Number implements Comparable<Byte> { public static final byte MIN_VALUE = -128; public static final byte MAX_VALUE = 127; public static final int SIZE = 8; public static final int BYTES = SIZE / Byte.SIZE; @SuppressWarnings("unchecked") public static final Class<Byte> TYPE = (Class<Byte>) Class.getPrimitiveClass("byte");
첫 번째 문장은 Byte 클래스가 최종 수정되어 상속될 수 없다는 점입니다. 숫자 클래스이며 일련의 숫자 유형에 사용할 수 있습니다. 변환은 비교에 사용할 수 있는 Comparable 인터페이스를 구현합니다.
두 번째 및 세 번째 문장은 최소값과 최대값을 정의합니다.
네 번째 문장은 바이트의 크기를 정의합니다. 이는 8비트, 즉 1바이트입니다.
다섯 번째 문장은 바이트를 제공합니다. 즉, SIZE/Byte.SIZE = 1을 차지합니다.
경고에 대해 침묵하도록 주석이 달린 문장은 이 클래스의 원래 클래스를 가져오는 것입니다.
public Byte(byte value) { this.value = value; } public Byte(String s) throws NumberFormatException { this.value = parseByte(s, 10); }
Byte 클래스의 두 생성자에는 여기에 제한 사항이 있습니다. 전달되는 값은 바이트 유형 값이어야 하며 문자열 s는 숫자로 변환될 수 있는 문자열이어야 합니다. 그렇지 않으면 오류가 보고됩니다
public static String toString(byte b) { return Integer.toString((int)b, 10); } public String toString() { return Integer.toString((int)value); } 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)); } }
다음 ByteCache 메소드는 Byte 캐시 값을 정의하고 -128~을 씁니다. 127을 캐시 배열로 넣습니다. 이 범위에 있으면 JVM은 캐시 값을 직접 사용하지만 이 범위를 초과하면 이전 기사에서 언급한 대로 128이 -128이 되어 계산이 수행됩니다. 최소값부터 계속됩니다.parseByte는 문자열 유형을 바이트 유형으로 구문 분석하며 radix는 무엇입니까? 구문 분석 후 결과는 10진수입니다
public static Byte valueOf(byte b) { final int offset = 128; return ByteCache.cache[(int)b + offset]; } 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); }
여기서는 radix 매개변수를 직접 가져오는 방법으로 문자열을 10진수로 구문 분석한 다음 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); }
를 수행하는 방법입니다. 이전 메소드는 이렇게 작성하지 않았습니다. 이제 Integer 클래스의 decode 메소드를 직접 호출하여 최소값보다 작거나 최대값보다 큰지 판단한 후 바이트 유형으로 변환하여 반환합니다. "바이트 유형은 Java에 존재하지 않습니다"라는 문장에 실제로 응답합니다
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; }
이것은 강제 유형 변환의 몇 가지 방법으로 매우 간단하지만 여전히 작성됩니다
@Override public int hashCode() { return Byte.hashCode(value); } public static int hashCode(byte value) { return (int)value; }
첫 번째 A hashCode는 Object의 hasCode 메소드를 다시 작성하여 사용됩니다. 두 값을 비교하기 위해 hashCode 메서드는 특히 인터뷰 중에 equals 메서드와 구별되는 경우가 많습니다. 이제 hashCode 메서드는 주로 collections에서 사용됩니다.
public boolean equals(Object obj) { if (obj instanceof Byte) { return value == ((Byte)obj).byteValue(); } return false; }
public int compareTo(Byte anotherByte) { return compare(this.value, anotherByte.value); } public static int compare(byte x, byte y) { return x - y; }
public static int toUnsignedInt(byte x) { return ((int) x) & 0xff; } public static long toUnsignedLong(byte x) { return ((long) x) & 0xffL; }
private static final long serialVersionUID = -7183698231559129828L;
java int를 바이트로, long을 바이트로
위 내용은 Java의 Byte 클래스 소스 코드에 대한 자세한 분석-단계 세부 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!