String-Konstruktor mit Nullwert

9

Warum verursacht String (String) -Konstruktor mit Nullwert einen Fehler bei der Kompilierung? Ich denke, es gibt 2+ Konstruktor, der Object und wenn init nimmt. es mit null weiß nicht, welches zu beginnen ist. Ich frage mich, ob es einen anderen Grund gibt.

%Vor%     
Adeel Ansari 26.01.2011, 08:18
quelle

4 Antworten

11

Weil der Compiler nicht herausfinden konnte, welcher Konstruktor aufgerufen werden soll. Sehen Sie hier , wie viele Ein-Argument-Konstruktoren es hat.

[Bearbeitet] Du hast gesagt, wenn es einen anderen Grund gibt. Also warum nicht selbst ausprobieren? Mach so etwas,

%Vor%     
Adeel Ansari 26.01.2011, 08:23
quelle
7

Wenn Sie einen Konstruktor oder eine Methode aufrufen, für die mehrere überschriebene Versionen gelten, wählt Java normalerweise den spezifischsten Konstruktor oder die Methode. Abschnitt 15.12.2 der Java-Sprachspezifikation erklärt dies in Detail.

Angenommen, Sie haben zwei überladene Methoden:

%Vor%

Wenn Sie method(null) aufrufen, gelten beide Methoden. Java wählt die spezifischste, in diesem Fall die zweite Methode, die ein String - weil String ist ein spezifischerer Typ als Object .

Manchmal kann jedoch der spezifischste Konstruktor oder die Methode nicht bestimmt werden. Wenn wir uns die Konstruktoren der Klasse String anschauen, die ein Argument haben:

%Vor%

Beachten Sie, dass zwischen den Typen byte[] , char[] , String , StringBuffer und StringBuilder keine Hierarchie besteht. Daher ist es nicht möglich zu sagen, dass einer dieser Konstruktoren spezifischer ist als die anderen. Daher weiß der Java-Compiler nicht, welcher Konstruktor ausgewählt werden soll und gibt Ihnen einen Fehler.

    
Jesper 26.01.2011 08:41
quelle
2

Nur um der Lösung mehr Klarheit zu verleihen:

Nehmen Sie dieses Beispiel:

%Vor%

Es wird keinen Kompilierzeitfehler verursachen, da der Compiler den spezifischsten Konstruktor der gleichen Typen auswählt. Wenn ich jedoch die Klasse zu

ändere %Vor%

Es wird einen Kompilierzeitfehler verursachen. Da hier zwei separate Konstruktorhierarchien beteiligt sind, hat der Compiler keine Möglichkeit, eine Entscheidung zu treffen. Eine Hierarchie ist: Object - & gt; String und zweite ist Object - & gt; Long, also keine Möglichkeit, zwischen Long- oder String-Konstruktoren zu wählen.

    
Atul S. 29.05.2015 09:01
quelle
1

String hat viele -Konstruktoren. null ist für sie verfügbar.

Bearbeiten: String hat 5 Ein-Argument-Konstruktor, in Java 6. Danke BoltClock und Adeel Ansari!

    
卢声远 Shengyuan Lu 26.01.2011 08:24
quelle

Tags und Links