
** Dup: [Ποια είναι η διαφορά μεταξύ του Χ = Χ ++? vs X ++ ;?](https://stackoverflow.com/questions/226002/whats-the-difference-between-x-x-vs-x) **


Έτσι, ακόμα κι αν ξέρω ότι ποτέ δεν θα το κάνουμε πραγματικότητα αυτό στον κώδικα, είμαι ακόμα περίεργος:



```
public static void main(String[] args) {
    int index = 0;
    System.out.println(index);   // 0
    index++;
    System.out.println(index);   // 1
    index = index++;
    System.out.println(index);   // 1
    System.out.println(index++); // 1
    System.out.println(index);   // 2
}

```

Να σημειωθεί ότι η 3η `sysout`εξακολουθεί να είναι `1`. Στο μυαλό μου η γραμμή `index = index++;`σημαίνει «που του δείκτη στο δείκτη, τότε αυξάνει δείκτη κατά 1» με τον ίδιο τρόπο `System.out.println(index++);`σημαίνει «περάσει ευρετήριο του println μέθοδο στη συνέχεια αύξηση του δείκτη κατά 1».


Αυτό δεν συμβαίνει όμως. Μπορεί κανείς να εξηγήσει τι συμβαίνει;

 
Γιατί δεν `δείκτη = δείκτης ++` `αύξηση index`;
===============================================



Αυτό είναι ένα αντίγραφο ερώτηση. 


**EDIT:** Δεν μπορώ να βρώ το πρωτότυπο: P μα καλά


α = a ++ χρησιμοποιεί το postincrement, η οποία compiler σας ερμηνεύει ως εξής:



```
a = function() {
   var old_value = a;
   a++;
   return old_value;
}

```

**EDIT 2:**  [Ποια είναι η διαφορά μεταξύ του Χ = Χ ++? vs X ++ ;?](https://stackoverflow.com/questions/226002/whats-the-difference-between-x-x-vs-x)

 

`value++;` είναι μετά την αύξηση.



```
int firtValue = 9;
int secondValue = firstValue++;

```

firstValue είναι τώρα 10, αλλά secondValue είναι 9, η αξία των firstValue πριν από αυξάνεται.


Τώρα με προ-αύξηση:



```
int firtValue = 9;
int secondValue = ++firstValue;

```

firstValue και secondValue είναι τώρα 10, fistValue αυξάνεται και, στη συνέχεια, η τιμή του asigned να secondValue.

 

Δεν έχω δοκιμάσει κάτι τέτοιο, αλλά είμαι πρόθυμος να είναι ότι η ανάθεση γίνεται μετά την αύξηση. 


Έτσι, αυτό που συμβαίνει στην πραγματικότητα σε ό, τι αφορά το compiler είναι:


1. αξιολογούν δείκτη
2. Κρατήστε την τιμή του δείκτη για αργότερα
3. Αυξήσετε την τιμή του δείκτη
4. Αναθέστε την παλιά τιμή του δείκτη, έτσι εξαφανίσουν την αύξηση.

 

Ο χειριστής μετά την αύξηση `index++`αυξάνει τη μεταβλητή, αλλά επιστρέφει παλιά αξία του, έτσι



```
int i = 5;
System.out.println(i++);

```

θα εκτυπώσει 5 ακόμη i είναι πλέον ίσο με 6.


αν θέλετε να επιστρέψετε την τιμή μετά τη χρήση της λειτουργίας αύξησης `++index`

 

Η εκχώρηση εμφανίζεται μετά η έκφραση έχει αξιολογηθεί. Έτσι δείκτης ++ έχει μια τιμή 0, αν και όπως ένας δείκτης παρενέργεια αυξάνεται. Στη συνέχεια, η τιμή (0) αποδίδεται στο ευρετήριο.

 

Θα πρέπει να εξετάσουμε τη σειρά αξιολογούνται τα πράγματα.


στην ακόλουθη δήλωση


Δείκτης = δείκτης ++?


τρία πράγματα συμβαίνουν 1), δεδομένου ότι είναι δείκτης ++, η αξία του δείκτη προσδιορίζεται 2) δείκτη αυξάνεται, 3) η τιμή που προσδιορίστηκε στο βήμα ένα κατόπιν εκχωρείται στη μεταβλητή στην αριστερή πλευρά της εξίσωσης

 

Δείτε [http://java.sun.com/docs/books/jls/second\_edition/html/typesValues.doc.html](http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html "τύπους και τις αξίες") για πληροφορίες σχετικά με τους κανόνες αξιολόγησης postfix.


Επίσης δείτε [http://java.sun.com/docs/books/jls/second\_edition/html/expressions.doc.html#39438](http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#39438 "εκφράσεις") για πληροφορίες.

 

Η απάντηση σε [αυτό το](https://stackoverflow.com/questions/226002/whats-the-difference-between-x-x-vs-x) ερώτημα θα πρέπει να βοηθήσει. Η θέση προσαύξηση κάνει να ενημερώσετε την τιμή του δείκτη, αλλά επιστρέφει την τιμή πριν από την ενημέρωση.

 