Was ist der Zweck des unären Plus-Operators von Java?
Lesezeit: 5 Minuten
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
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
Peter Perhač
Hier ist eine kurze Demonstration dessen, was das unäre Plus mit a macht Character Variable:
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.
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
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