[JAVA] Ich habe die Quelle von Byte gelesen

Irgendwie habe ich beschlossen, auch die JDK-Quelle zu lesen. Trotzdem habe ich keine Zeit, jede Zeile sorgfältig zu lesen, also habe ich sie kurz gelesen und diesen Code gefunden.

Byte-Klasse

Die Byte-Klasse ist eine Wrapper-Klasse für das primitive Byte. Es scheint, dass ich beim Lesen der Quelle nichts gefunden habe, was überraschend ist.

Erstens Felder und Konstruktoren. Nun, es ist eine Quelle, die sich jeder vorstellen kann.

Byte.java


    private final byte value;

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

ByteCache-Klasse

Tatsächlich gibt es eine ByteCache-Klasse, die in Javadoc nicht angezeigt wird.

Byte.java


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

Was wir tun, ist das Zwischenspeichern von Instanzen von -128 bis 127. Oh, das bedeutet, dass sich alle Bytewerte im Cache befinden.

Es ist ein Cache von ByteCache, auf den jedoch von valueOf verwiesen wird.

Byte.java


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

Vergleiche mit dem Vergleichsoperator ==

Befindet sich die Instanz im Cache, können Sie sie mit dem Operator == vergleichen. Ausprobieren.

Main.java


	public static void main(String[] args) {
		byte b0 = 1;
		Byte b1 = new Byte(b0);
		Byte b2 = Byte.valueOf(b0);
		Byte b3 = b0;
		System.out.println(b1 == b2);
		System.out.println(b1 == b3);
		System.out.println(b2 == b3);
	}

Ergebnis ist ···

false
false
true

Das ist sehr schade. Es ist ganz natürlich, dass new Byte () eine andere Instanz erstellt, aber der Referenzwert der Instanz ist unterschiedlich. Die Tatsache, dass Autoboxing (Variable b3) mit Byte.valueOf () identisch ist, bedeutet jedoch, dass Autoboxing Byte.valueOf () anstelle von new Byte () aufruft.

Außerdem ...

Nicht wirklich. Apropos Kraft: Wenn Sie neues Byte (1) oder Byte.valueOf (1) schreiben, wird der Compiler wütend, dass der int-Typ nicht in den Byte-Typ konvertiert werden kann, aber Sie können sehen, dass die Konstante den Byte-Bereich nicht überschreitet! Ich fühle mich wie. Der Compiler scheint klug und ziemlich hartnäckig zu sein, daher möchte ich, dass er etwas flexibler ist.

Recommended Posts

Ich habe die Quelle von Byte gelesen
Ich habe die Quelle von ArrayList gelesen, die ich gelesen habe
Ich habe die Quelle von Integer gelesen
Ich habe die Quelle von Short gelesen
Ich habe die Quelle von String gelesen
Ich habe das Kotlin-Startbuch gelesen
Ist drainTo von LinkedBlockingQueue sicher? Ich bin der Quelle gefolgt
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe die interne Verarbeitung von Retrofit untersucht
[Tag: 5] Ich habe die Grundlagen von Java zusammengefasst
Ich habe die Grundlagen der Zeicheneingabe verstanden
Ich habe die Eigenschaften von Java und .NET verglichen
Ich möchte den Inhalt der Absicht var_dump
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe die Anzahl der Taxis mit Ruby überprüft
Probieren Sie Progate Free Edition [Java I]
[Java] So erhalten Sie die URL der Übergangsquelle
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Ich habe den lesbaren Code gelesen, machen Sie sich also eine Notiz
Ich war süchtig nach der Aufzeichnung des zugehörigen Modells
Ich habe die Listenansicht der Android-Entwicklung gemeinsam gesehen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Beurteilung des Kalenders
Ich habe den neuen Feature-Profiler von IntelliJ IDEA 2019.2 ausprobiert.
Die Welt der Clara-Regeln (4)
Ich möchte die Antwort der Janken-App wissen
Bildverarbeitung: Grundstruktur des vom Programm gelesenen Bildes
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich habe das Anzeigeformat der JSON-Antwort von Rails zusammengefasst
Die Welt der Clara-Regeln (1)
Die Welt der Clara-Regeln (3)
Lesen Sie die Java HashMap-Quelle
Ich habe den "Object-Oriented Practice Guide" gelesen, also ein Memorandum
Quelle zellulärer Objekte
Lesen Sie das Rails-Handbuch erneut (Übersicht über Action Controller).
Ich habe ein Sequenzdiagramm des j.u.c.Flow-Beispiels geschrieben
Die Welt der Clara-Regeln (5)
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Die Idee der schnellen Sortierung
Ich bin mir der Bequemlichkeit des Graphql-Code-Generators Teil 2 sehr bewusst
Ich kann den Bildschirm der Rails-Datenbankkonsole nicht verlassen
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Die Idee von jQuery
Ich habe die Serverseite des Online-Kartenspiels gemacht made
Ich habe das Verhalten von Java Scanner und .nextLine () nicht wirklich verstanden.
Ich habe einen Blick in die Java HashMap geworfen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Android] Beenden Sie die Aktivität der Übergangsquelle zum Zeitpunkt des Bildschirmübergangs
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Geben Sie beim Erstellen mit Maven den Zeichencode der Quelle an