Warum wird System.in als nullInputStream () anstelle von null deklariert?

8

In der System class, in , out und err sind statische Felder. Diese Felder sind zum Beispiel deklariert:

%Vor%

Warum deklarieren Sie nullInputStream() statt null ?

    
user1357722 27.05.2012, 13:01
quelle

2 Antworten

8

Der Quellcode hat den folgenden Kommentar:

%Vor%

Kurz gesagt, da System.in eine statische letzte Variable ist, würde der Compiler, wenn sie auf null gesetzt wäre, sie als Konstante betrachten und alle Referenzen auf System.in in anderen Klassen durch% co_de ersetzen % (das bedeutet Inlining). Was offensichtlich alles funktionsunfähig machen würde. Ein systemeigener Code muss verwendet werden, um den Wert dieses null final-Werts (der normalerweise niemals geändert werden sollte) nach der Initialisierung des Systems zu ersetzen.

Um fortzufahren: Es wird verwendet, um eine Compileroptimierung zu vermeiden, die in diesem sehr speziellen Fall nicht gemacht werden sollte, weil System.in ein letztes Feld ist, das sich ändern kann, was normalerweise unmöglich ist.

    
JB Nizet 27.05.2012, 13:13
quelle
-1

Sie liegen falsch.

Im Java-Quellcode wird es als

geschrieben %Vor%

nicht

%Vor%

Sie können auf den Quellcode für die Klasse System hier .

    
Bhavik Ambani 27.05.2012 13:04
quelle

Tags und Links