Because arrays are 0 based indexed.
Imagine that you have a stack with 2 elements.
So the size of the stack is equals to 2 with the following representation in the array :
elements[0] = elem;
elements[1] = elem;
So you need to decrease size before pop the elem from the stack, otherwise you will try to pop elements[2]
, which doesn't exists. So an infix operator is used in this case.
return elements[--size];
is equivalent to
size--;
return elements[size];
If elements[size--];
was written, it would try to pop elements[2]
and then decrease size by 1. So an ArrayIndexOutOfBoundsException
will be thrown each time you want to pop an element from the stack.