2017-05-11 3 views
-3

Ich habe zwei Methoden hinzufügen mit Argument int und lang. Wenn ich "add (2)" aufrufe, wird add-Methode mit int-Parameter aufgerufen. Kann jemand die Logik dahinter helfen? Warum wird die andere Add-Methode nicht aufgerufen?Java-Methode Aufrufe mit anderen Parameter

private static void add(int a){ 
    System.out.println("int"); 
} 

    private static void add(long b){ 
    System.out.println("long"); 
} 
+0

Kennen Sie Überladung? –

Antwort

7

Das ist eine Überladung der Methode. Wenn mehrere Methoden mit demselben Namen verfügbar sind, wählt der Compiler die Methode aus, die den angegebenen Parametern am besten entspricht.

2 ist ein Literal vom Typ int, so add(2) ruft die Methode, die ein int Argument annimmt. Um die Methode aufzurufen, die eine long dauert, rufen Sie add(2L) oder add((long)2).

1

Konzept dahinter ist Methode Überlastung, die bei der Kompilierung überprüft wird, wenn Sie int (2) als Argument Methode add passieren, dann wird es die nächste Methode entsprechen, wenn mehrere Methoden mit add vorhanden ist und die gegebene param entspricht mit der besten Übereinstimmungsmethode, dh die am besten mit der Argumentliste übereinstimmt.

Lesen Sie mehr über Methode überladen https://docs.oracle.com/javase/tutorial/java/IandI/override.html und https://www.tutorialspoint.com/java/java_overriding.htm.

0

Das Zahlenliteral 2 wird als int Typ zuerst bewertet, wenn möglich. Der Compiler versucht immer, es in int zu machen. Wenn int nicht kompiliert wird, versuchen Sie es mit anderen Typen zu bewerten.

Wenn Sie also die Methode mit dem Parameter int entfernen, wird 2 vom Typ long sein. Wenn Sie beide Überladungen entfernen und eine hinzufügen, die eine double akzeptiert, wird 2 als vom Typ double ausgewertet.

Wenn Sie explizit angeben möchten, dass Sie die Methode long aufrufen möchten, verwenden Sie ein langes Literal wie 2L oder 2l. Alternativ, gießen Sie es zu einem langen von (long)2.

0

Standardmäßig versucht Java, (ganze) numerische Literale als int-Werte zu behandeln. Daher wird die Methode aufgerufen, die einen int-Parameter erwartet.

Integer Literale

Ein Ganzzahlliteral ist vom Typ lange, wenn sie mit dem Buchstaben L oder L endet; ansonsten ist es vom Typ int. Es wird empfohlen, dass Sie die obere Buchstaben L verwenden, da die Kleinbuchstaben l hart ist aus der Ziffer 1.

Oracle Tutorial Siehe zu unterscheiden.

Verwandte Themen