> Java > java지도 시간 > Java의 Byte 클래스 소스 코드에 대한 자세한 분석-단계 세부 사항

Java의 Byte 클래스 소스 코드에 대한 자세한 분석-단계 세부 사항

php是最好的语言
풀어 주다: 2018-08-04 11:36:58
원래의
1545명이 탐색했습니다.

오늘은 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));
        }
    }
로그인 후 복사
  • 다음 단계는 바이트 유형을 문자열로 변환하는 toString 메소드이며, 여기에 Integer가 사용됩니다.

다음 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;
    }
로그인 후 복사

equals 메서드를 이제 비교할 수 있습니다.

    public int compareTo(Byte anotherByte) {
        return compare(this.value, anotherByte.value);
    }
    public static int compare(byte x, byte y) {
        return x - y;
    }
로그인 후 복사

비교 방법, x > y이면 양수를 반환하고, x = y이면 0을 반환합니다. x < y이면 음수 반환

    public static int toUnsignedInt(byte x) {
        return ((int) x) & 0xff;
    }
    public static long toUnsignedLong(byte x) {
        return ((long) x) & 0xffL;
    }
로그인 후 복사

바이트 유형을 unsigned int 유형과 long 유형으로 변환

private static final long serialVersionUID = -7183698231559129828L;
로그인 후 복사

직렬화 중에 사용됩니다. 지금은 자세히 설명하지 않으며 직렬화를 이해하지 못합니다. 아주 잘. . . .
  • 관련 기사:

java int를 바이트로, long을 바이트로

Java의 버퍼 소스 코드 분석

위 내용은 Java의 Byte 클래스 소스 코드에 대한 자세한 분석-단계 세부 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿