# Unterschied zwischen a++ und ++a



## Reap (1. Feb 2005)

Hallo!
Was ist eigentlich der Unterschied wenn ich z.b.:
int a = 5 bestimme und

a--    a = 
--a    a = 


a++  a = 
++a  a =

rechne?

_Titel abgeändert /Stefan1200_


----------



## Destiny1985 (1. Feb 2005)

beispiel einer for-schleife


```
for (int a = 5; a = 10; a--)
```
a wird nach durchlaufen der schleife um eins erniedrigt

```
for (int a = 5; a = 10; --a)
```
a wird vor durchlaufen der schleife um eins erniedrigt


----------



## Beni (1. Feb 2005)

Probier es aus:

```
int a = 5;
System.out.print( a-- );
System.out.println( " ergibt " + a );

a = 5;
System.out.print( --a );
System.out.println( " ergibt " + a );
```

Einmal wird zuerst a verkleinert (oder erhöht bei ++), und dann mit a weitergerechnet; das andere mal wird zuerst gerechnet, dann verkleinert/erhöht.


----------



## Stefan1200 (1. Feb 2005)

a--
Du bekommst die Zahl 5 zurück gegeben, und danach wird von dem Wert in der Variable a einer abgezogen (4).

--a
Es wird erst in der Variable einer abgezogen und dann die Zahl 4 zurück gegeben.

a++
Erst bekommst du die Zahl 5, danach steht in der Variable die 6.

++a
Erst wird die Variable auf 6 erhöht, und dann bekommst du auch die 6 zurück.


----------



## Bleiglanz (1. Feb 2005)

GAR NICHT

das ganze taucht nur auf, wenn der seiteneffekt bei einer Zuweisung dabei ist (wenn nichts weiter mit dem ausdruck gemacht wird, ist es egal ob man a++ oder ++a oder a+=1 schreibt)

int a=5;

// ACHTUNG JETZT RELEVANT

int b= a++;
int c= --a;
int d= ++a;

//  JETZT IRRELEVANT

a++;   // macht genau das gleiche wie a++ oder a+=1
--a;     //  macht genau das gleiche wie a-- oder a-=1


----------



## dark_red (1. Feb 2005)

Jetzt will ich auch noch  

Ein Code sagt mehr als tausend Worte:

```
int x = 5;
int ausgabe = x;

System.out.println("x: " + x);
System.out.println("ausgabe: " + ausgabe);

ausgabe = x--;

System.out.println("x: " + x);
System.out.println("ausgabe: " + ausgabe);

ausgabe = --x;

System.out.println("x: " + x);
System.out.println("ausgabe: " + ausgabe);
```


----------



## bygones (1. Feb 2005)

@Destiny:

leider ist das nicht richtig - wie Bleiglanz schon sagt... solange es keine Zuweisung hat ist es irrelevant....

weil sonst sollte 

```
int[] i = new int[1];
		i[0] = 1;
		for (int j = 0; j < i.length; ++j) {
			System.out.println(i[j]);
		}
```
ja fehlschlagen, da j am beginn der schleife um eins erhöht wird (und somit 1 wäre) -> sollte ArrayIndexOutOfBound.... Exception kommen. Tuts aber nicht

Also - wie man das in den Schleifen schreibt ist Schnuppe !!

_ edited by thE_29: code tags :bae:_


----------



## Destiny1985 (1. Feb 2005)

hm ok...


----------



## thE_29 (1. Feb 2005)

Am bestern beim ? : Operator wenn man was eröhehen will und dann weiterarbeiten 



```
b[x] = heuteMontag() ? ++x == x ? true : false : false;
```

Gleichzeitiges erhöhen und zurückgeben von was anderem 

Gerne benutzt wenn viele Dinge in 1er Zeile gemacht werden müßen!

Was aber net geht, wäre das


```
b[x] = heuteMontag() ? x++ == x ? true : false : false;
```


----------



## niemand (2. Feb 2005)

Ich auch noch:

```
int a=2;
if(a-- == 2){
    System.out.println(a);
}
if(++a == 2) {
    System.out.println(a);
}
```
... ich finde, das veranschaulicht die Problematik ganz gut.

cu


----------

