Есть ли разница между ++ x и x ++ в java?
Есть ли разница между x ++ и ++ x в java?
Ответ 1
++ x называется preincrement, а x ++ называется postincrement.
int x = 5, y = 5;
System.out.println(++x); // outputs 6
System.out.println(x); // outputs 6
System.out.println(y++); // outputs 5
System.out.println(y); // outputs 6
Ответ 2
да
++ x увеличивает значение x, а затем возвращает x 
x ++ возвращает значение x, а затем увеличивает
Пример:
x=0;
a=++x;
b=x++;
после запуска кода как a, так и b будет 1, но x будет 2.
Ответ 3
Они известны как операторы постфикса и префикса. Оба добавят 1 к переменной, но есть разница в результате инструкции.
int x = 0;
int y = 0;
y = ++x;            // result: y=1, x=1
int x = 0;
int y = 0;
y = x++;            // result: y=0, x=1
Ответ 4
Да,
int x=5;
System.out.println(++x);
напечатает 6 и
int x=5;
System.out.println(x++);
напечатает 5.
Ответ 5
Я приземлился здесь из одного из недавних dup, и хотя этот вопрос больше, чем ответил, я не мог помочь декомпиляция кода и добавление "еще одного ответа": -)
Чтобы быть точным (и, вероятно, немного педантичным),
int y = 2;
y = y++;
скомпилирован в:
int y = 2;
int tmp = y;
y = y+1;
y = tmp;
Если вы javac этот Y.java класс:
public class Y {
    public static void main(String []args) {
        int y = 2;
        y = y++;
    }
}
и javap -c Y вы получаете следующий код jvm (я разрешил мне прокомментировать основной метод с помощью Спецификация виртуальной машины Java):
public class Y extends java.lang.Object{
public Y();
  Code:
   0:   aload_0
   1:   invokespecial  #1; //Method java/lang/Object."<init>":()V
   4:   return
public static void main(java.lang.String[]);
  Code:
   0:   iconst_2 // Push int constant `2` onto the operand stack. 
   1:   istore_1 // Pop the value on top of the operand stack (`2`) and set the
                 // value of the local variable at index `1` (`y`) to this value.
   2:   iload_1  // Push the value (`2`) of the local variable at index `1` (`y`)
                 // onto the operand stack
   3:   iinc  1, 1 // Sign-extend the constant value `1` to an int, and increment
                   // by this amount the local variable at index `1` (`y`)
   6:   istore_1 // Pop the value on top of the operand stack (`2`) and set the
                 // value of the local variable at index `1` (`y`) to this value.
   7:   return
}
Таким образом, мы, наконец, имеем:
0,1: y=2
2: tmp=y
3: y=y+1
6: y=tmp
Ответ 6
При рассмотрении того, что на самом деле делает компьютер...
++ x: загрузить x из памяти, увеличить, использовать, сохранить обратно в память.
x ++: загрузка x из памяти, использование, увеличение, сохранение в памяти.
Рассмотрим: a = 0 x = f (a ++) y = f (++ a)
где функция f (p) возвращает p + 1
x будет 1 (или 2)
y будет 2 (или 1)
И в этом проблема. Предоставил ли автор компилятора параметр после извлечения, после использования или после хранения.
Как правило, просто используйте x = x + 1. Это проще.
Ответ 7
Да.
public class IncrementTest extends TestCase {
    public void testPreIncrement() throws Exception {
        int i = 0;
        int j = i++;
        assertEquals(0, j);
        assertEquals(1, i);
    }
    public void testPostIncrement() throws Exception {
        int i = 0;
        int j = ++i;
        assertEquals(1, j);
        assertEquals(1, i);
    }
}
Ответ 8
В Java существует разница между x ++ и ++ x
++ x - это префиксная форма: Он увеличивает выражение переменных, а затем использует новое значение в выражении.
Например, если используется в коде:
int x = 3;
int y = ++x;
//Using ++x in the above is a two step operation.
//The first operation is to increment x, so x = 1 + 3 = 4
//The second operation is y = x so y = 4
System.out.println(y); //It will print out '4'
System.out.println(x); //It will print out '4'
x ++ - это постфиксная форма: Значение переменных сначала используется в выражении, а затем после операции оно увеличивается.
Например, если используется в коде:
int x = 3;
int y = x++;
//Using x++ in the above is a two step operation.
//The first operation is y = x so y = 3
//The second operation is to increment x, so x = 1 + 3 = 4
System.out.println(y); //It will print out '3'
System.out.println(x); //It will print out '4' 
Надеюсь, это понятно. Запуск и игра с вышеуказанным кодом должны помочь вам понять.
Ответ 9
Да, используя выражение ++ X, X + 1 будет использоваться в выражении. Используя X ++, X будет использоваться в выражении, и X будет увеличен только после того, как выражение будет оценено.
Итак, если X = 9, используя ++ X, будет использоваться значение 10, иначе значение 9.
Ответ 10
Если он похож на многие другие языки, вам может потребоваться простая попытка:
i = 0;
if (0 == i++) // if true, increment happened after equality check
if (2 == ++i) // if true, increment happened before equality check
Если выше это не так, они могут быть эквивалентными
Ответ 11
Да, возвращаемое значение - это значение после и до инкремента, соответственно.
class Foo {
    public static void main(String args[]) {
        int x = 1;
        int a = x++;
        System.out.println("a is now " + a);
        x = 1;
        a = ++x;
        System.out.println("a is now " + a);
    }
}
$ java Foo
a is now 1
a is now 2
Ответ 12
ОК, я приземлился здесь, потому что недавно я столкнулся с одной проблемой при проверке реализации классического стека. Напомним, что это используется в реализации Stack на основе массива, которая немного быстрее, чем связанный список.
Код ниже, проверьте функцию push и pop.
public class FixedCapacityStackOfStrings
{
  private String[] s;
  private int N=0;
  public FixedCapacityStackOfStrings(int capacity)
  { s = new String[capacity];}
  public boolean isEmpty()
  { return N == 0;}
  public void push(String item)
  { s[N++] = item; }
  public String pop()
  { 
    String item = s[--N];
    s[N] = null;
    return item;
  }
}
Ответ 13
Да, есть разница, incase of x ++ (postincrement), значение x будет использоваться в выражении, а x будет увеличено на 1 после того, как выражение будет оценено, с другой стороны, ++ x (preincrement), x + 1 будет использоваться в выражении. Пример:
public static void main(String args[])
{
    int i , j , k = 0;
    j = k++; // Value of j is 0
    i = ++j; // Value of i becomes 1
    k = i++; // Value of k is 1
    System.out.println(k);  
}
Ответ 14
Вопрос уже ответил, но позвольте мне добавить и с моей стороны.
В первую очередь ++ означает увеличение на единицу, а - означает уменьшение на единицу.
Теперь x ++ означает Increment x после этой строки и ++ x означает Increment x до этой строки.
Проверьте этот пример
class Example {
public static void main (String args[]) {
      int x=17,a,b;
      a=x++;
      b=++x;
      System.out.println("x=" + x +"a=" +a);
      System.out.println("x=" + x + "b=" +b);
      a = x--;
      b = --x;
      System.out.println("x=" + x + "a=" +a);
      System.out.println("x=" + x + "b=" +b);
      }
}
Он даст следующий результат:
x=19 a=17
x=19 b=19
x=18 a=19
x=17 b=17
Ответ 15
С я ++ он называется постинкрестностью, и значение используется в любом контексте, затем увеличивается; ++ я preincrement увеличивает значение сначала, а затем использует его в контексте.
Если вы не используете его ни в каком контексте, это не имеет значения, что вы используете, но постинкремент используется по соглашению.
Ответ 16
Существует огромная разница.
Поскольку большинство ответов уже указывали на теорию, я хотел бы указать на простой пример:
int x = 1;
//would print 1 as first statement will x = x and then x will increase
int x = x++;
System.out.println(x);
Теперь посмотрим ++x:
int x = 1;
//would print 2 as first statement will increment x and then x will be stored
int x = ++x;
System.out.println(x);
