Was passiert, wenn Sie den Abstand zwischen den Operatoren + und ++ entfernen?

7

BEARBEITEN 1

HAFTUNGSAUSSCHLUSS: Ich weiß, dass +++ nicht wirklich ein Operator ist, sondern die Operatoren + und ++ ohne Leerzeichen. Ich weiß auch, dass es keinen Grund gibt, das zu benutzen; Diese Frage ist nur aus Neugier.

Es interessiert mich also, ob der Abstand zwischen + und ++var in Java benötigt wird.

Hier ist mein Testcode:

%Vor%

Dies druckt:

%Vor%

was wie erwartet funktioniert, so als ob zwischen dem ersten und zweiten + ein Leerzeichen wäre.

Dann habe ich es mit String-Verkettung versucht:

%Vor%

Dies druckt:

%Vor%

Aber wenn die dritte Zeile unkommentiert ist, kompiliert der Code nicht mit dem Fehler:

%Vor%

Was verursacht den Unterschied im Verhalten zwischen String-Verkettung und Ganzzahl-Addition?

BEARBEITEN 2

Wie in diskutiert, folgt Abhijit -up-Frage , die Regel, die von den Leuten erwähnt wurde (das größere Token ++ wird zuerst geparst, bevor das kürzere Token ++), wird in diese Präsentation , in der die Regel Munchy Munchy zu stehen scheint.

    
chm 13.03.2013, 06:23
quelle

4 Antworten

5

Der Compiler erzeugt beim Analysieren der Quelle die längsten möglichen Token. Wenn er auf +++ trifft, wird er als ++ + verwendet.

Also der Code von

%Vor%

Wird immer gleich wie

sein %Vor%     
Valeri Atamaniouk 13.03.2013, 10:06
quelle
13

Es gibt keinen Operator +++ . Was Sie dort haben, ist ein postfix ++ Operator gefolgt von einem Infix + Operator. Das ist ein Kompilierungsfehler, weil postfix ++ nur auf eine Variable angewendet werden kann und "s " keine Variable ist.

Da Sie wirklich einen infix + Operator gefolgt von einem Präfix ++ Operator meinen, müssen Sie den Abstand zwischen den Operatoren angeben.

Eigentlich solltest du es sowieso tun. +++ ist ein Verbrechen gegen die Lesbarkeit !!!

    
Stephen C 13.03.2013 06:27
quelle
2

Das Triple Plus ist kein Operator selbst, es sind zwei Operatoren kombiniert:

Was das Triple plus tatsächlich tut, ist:

a +++ 1 == a ++ + 1;

Was Sie versuchen, ist ++ eine Zeichenfolge, die nicht definiert ist.

Benutze niemals +++ ohne Leerzeichen in deinem Code; kaum jemand wird wissen, was es tut (ohne Web-Beratung). Außerdem, nach einer Woche oder so, werden Sie nicht wissen, was es selbst tut.

    
Dariusz 13.03.2013 06:27
quelle
1

+++ ist kein Operator für sich.

i = i +++i; ergibt einen pre-increment -Wert von i , fügt ihn dann zum Wert von i hinzu und speichert ihn in i .

Mit der Zeichenfolge + ist keine Addition gemeint, also versuchen Sie, die Zeichenfolge und die ganze Zahl miteinander zu verketten.

    
Makoto 13.03.2013 06:28
quelle