1
int number = 10;
int result = 0
        for (int i = 10; i <= 50; i += 10) {
            number = i;
            result = --number - number--;
            System.out.println("i = " + i + ", number = " + number +
                    ", result = " + result);

The result is

i = 10, number = 8, result = 0

i = 20, number = 18, result = 0

i = 30, number = 28, result = 0

i = 40, number = 38, result = 0

i = 50, number = 48, result = 0

I want to know how the operators work step by step in result = --number - number-- ; . What are the values of number while executing the above statement? Thank you.

WJS
  • 36,363
  • 4
  • 24
  • 39

3 Answers3

2

I think only this much code is enough to make you understand this concept:

public class Main {
    public static void main(String[] args) {
        int number = 10;
        int result = --number - number--;
        System.out.println("number = " + number + ", result = " + result);
    }
}

This is how it is processed:

--number => number = number - 1 => number = 10 - 1 => number = 9 
result = --number - number-- => result = 9 - 9 => result = 0
number-- => number = number - 1 => number = 9 - 1  => number = 8

Thus the output:

number = 8, result = 0
Arvind Kumar Avinash
  • 71,965
  • 6
  • 74
  • 110
2

To understand what --number and number-- mean, it is useful to consider that these are both expressions with side-effects

  • An expression is a part of the code which has a value.
  • A side-effect means that something changes as a result of evaluating that expression.

Looking at each of them in turn:

  • --number's side effect is to decrease the number's value by 1; its value is the number stored in number after decreasing it.
  • number--'s side effect is to increase the number's value by 1; its value is the number stored in number before decreasing it.

Because Java evaluates expressions left-to-right, in --number - number--, --number is evaluated first; then number-- is evaluated next.

  • The initial value of number is some value, say, X
  • The value of --number is X - 1; the value stored in number afterwards is X - 1.
  • The value of number-- is the same value, X - 1; the value stored in number afterwards is X - 2.
  • Hence, --number - number-- is (X - 1) - (X - 1), which is zero
  • The final value of number is X - 2.
Andy Turner
  • 137,514
  • 11
  • 162
  • 243
1

A slightly different explanation. Your code. Let i = 10

number = i;
result = --number - number--;

Is the same as

number = i;
number = number - 1;  // number is now 9
result = number;      // result is now 9
result = number - number;  // result is now 0
number = number - 1;       // number is now 8

so the first line would be

i = 10, number = 8, result = 0

Pre-increments and decrements are applied before using the value, and post increments and decrements are applied after using the value.

WJS
  • 36,363
  • 4
  • 24
  • 39