Was ist der Zweck des unären Plus-Operators von Java?

Lesezeit: 5 Minuten

Was ist der Zweck des unaren Plus Operators von Java
Syntaktisch

Der unäre Plus-Operator von Java scheint über C++ von C übernommen worden zu sein.

int result = +1;   

Es scheint folgende Auswirkungen zu haben:

  • Entpackt seinen Operanden, wenn es sich um ein Wrapper-Objekt handelt
  • Fördert seinen Operanden zu intfalls es nicht schon eine ist int oder breiter
  • Erschwert etwas die Analyse von bösen Ausdrücken, die eine große Anzahl aufeinanderfolgender Pluszeichen enthalten

Es scheint mir, dass es bessere/klarere Wege gibt, all diese Dinge zu tun.

In dieser SO-Frage zum Gegenstück-Operator in C# sagte jemand: “Es ist da, um überladen zu werden, wenn Sie das Bedürfnis haben.”

In Java kann man jedoch nicht überladen beliebig Operator. Existiert dieser unäre Plus-Operator also nur in Java, weil er in C++ existiert?

  • Code-Verschleierung-Wettbewerbe … die SCJP-Prüfung …

    – Knallt

    13. April 10 um 6:18 Uhr

  • Ähnliche Frage für C, das auch keine Überladung hat: stackoverflow.com/questions/6637005/… , und analog zu Java gibt es Promotion.

    – Ciro Santilli 新疆再教育营六四事件法轮功郝海东

    17. März ’15 um 12:30 Uhr


Was ist der Zweck des unaren Plus Operators von Java
Johannes Feminella

Der unäre Plus-Operator führt eine automatische Umwandlung in durch int wenn der Typ seines Operanden ist byte, charoder short. Das nennt man unäre numerische Beförderungund es ermöglicht Ihnen, Dinge wie die folgenden zu tun:

char c="c";
int i = +c;

Zugegeben, es ist von begrenztem Nutzen. Aber es hat einen Zweck. Siehe die Spezifikation, insbesondere die Abschnitte §15.15.3 und §5.6.1.

  • Richtig, aber in diesem Fall ist es überflüssig. Da es sich um eine erweiternde Konvertierung handelt, int i = c; werde das gleiche tun.

    – Syntaktisch

    12. April 10 um 18:56 Uhr

  • Es ist im ganzheitlichen Sinne nicht unbedingt überflüssig, weil es Absicht vermittelt. Man könnte sich zu Recht fragen int i = c“wollte der Autor dieses Codes zuordnen c zu einem int?” Gibt es andere Möglichkeiten, es zu tun? Sicher, aber dies ist der kürzeste Weg, der auch Absicht vermittelt.

    – Johannes Feminella

    12. April 10 um 19:35 Uhr


  • Guter Punkt. Ich denke, in der Praxis würde ich eher tun int i = (int) c; wenn ich Absicht vermitteln wollte, aber mit der + ist sicherlich kürzer.

    – Syntaktisch

    12. April 10 um 23:26 Uhr

  • @JohnFeminella “vermittelt Absicht”? Ich glaube das nicht wirklich, da andere, die den Code lesen, nicht wirklich wissen würden, warum er da ist. Wie Sie den anderen Antworten entnehmen können, scheinen die meisten Leute keine Ahnung zu haben unäre numerische Beförderung. Ich persönlich dachte immer, es wäre ein No-Op und es ist aus rein kosmetischen Gründen da. Wenn numerische Beförderung Ihre Absicht ist, dann (int) c ist viel klarer, da es sich um ein allgegenwärtiges, weithin akzeptiertes Muster handelt. Trotzdem +1 dafür, dass Sie mir etwas beigebracht haben, das ich nicht wusste.

    – Nicu Stiurca

    5. August 12 um 0:15 Uhr

  • I stimme zu (int) c ist klarer. Aber ich habe nicht gesagt, dass dies der Fall ist am klarsten Art und Weise, die Konvertierung durchzuführen und auch die Absicht zu vermitteln; Ich sagte, es war die kürzeste. 🙂

    – Johannes Feminella

    5. August 12 um 4:48 Uhr

1644117488 526 Was ist der Zweck des unaren Plus Operators von Java
Peter Perhač

Hier ist eine kurze Demonstration dessen, was das unäre Plus mit a macht Character Variable:

private static void method(int i){
    System.out.println("int: " + i);
}

private static void method(char c){
    System.out.println("char: " + c);
}

public static void main(String[] args) {
    Character ch="X";
    method(ch);
    method(+ch);        
}

Die Ausgabe beim Ausführen dieses Programms ist:

char: X
int: 88

Wie es funktioniert: Unary + oder – entpacken ihren Operanden, wenn es sich um ein Wrapper-Objekt handelt, dann stufen sie ihren Operanden auf int um, falls nicht bereits ein int oder breiter. Also, wie wir sehen können, während der erste Anruf an method wird die wählen char überlasten (nur Unboxing), beim zweiten Anruf wird die gewählt int Version von method. Variable ch des Typs Character wird übergegangen method wie int Argument wegen der angewandten unäres Plus.

  • Was genau ist ein „Programm“?

    – Saphir_Ziegel

    20. Januar 21 um 21:53 Uhr

Ich weiß es nicht, aber ich vermute, es dient der Symmetrie mit dem (offensichtlich notwendigen) unären Minusoperator.

  • Es ist durchaus möglich, dass ich hier auf Stack Overflow sitzen und mich darüber beschweren würde, wenn es in Java keinen unären Plus-Operator gäbe …

    – Syntaktisch

    12. April 10 um 19:08 Uhr

  • @Syntaktisch unwahrscheinlich. Wenn es keinen unären Plusoperator gäbe, könnten Sie den verwenden intValue() Methode statt.

    – Saphir_Ziegel

    20. Januar 21 um 22:02 Uhr

Eines der Designziele von Java war es, vertraut zu sein (für einen C/C++-Entwickler). Wenn es also um Operatoren wie diesen ging, bin ich mir ziemlich sicher, dass sie einen triftigen Grund haben müssten, sie auszuschließen, keinen guten Grund, sie zu brauchen .

Meine Vermutung ist, dass es da ist, weil manchmal das Eintippen des Pluszeichens die Dinge klarer macht. Vielleicht möchten Sie die Tatsache betonen, dass einige Zahlen positiv sind, im Gegensatz zu einigen negativen Zahlen.

Um ein Beispiel aus der Praxis zu geben, wo es verwendet wird, wird positiven Temperaturen in einigen Teilen der Welt immer ein Plus vorangestellt.

Viele andere Sprachen haben ein unäres Plus. Es ist üblich, es einzubeziehen, und Sparsamkeit, es auszuschließen. Es sind nur ein paar Zeilen in einem Compiler.

Loschen Sie mehrere Problem PR Kommentare uber die GitHub API
dan1st

Die unären Operatoren machen für Java Folgendes:

  • + Unärer Plusoperator; zeigt positiven Wert an (Zahlen sind jedoch ohne diesen positiv)
  • - Unärer Minusoperator; negiert einen Ausdruck
  • ++ Inkrementoperator; erhöht einen Wert um 1
  • -- Dekrementoperator; verringert einen Wert um 1
  • ! Logischer Komplementoperator; invertiert den Wert eines booleschen Werts

Quelle: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html

  • Der von Ihnen angegebene Link ist irreführend. Einstellig + gibt keinen “positiven Wert” an: +-1 gleich -1.

    – Saphir_Ziegel

    20. Januar 21 um 21:52 Uhr

.

791670cookie-checkWas ist der Zweck des unären Plus-Operators von Java?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy