Есть ли разница между x ++ и ++ x в java?

Есть ли разница между ++ x и x ++ в java?

 dotjoe07 июл. 2009 г., 23:16
чтобы быстрее всего добыть, отсортировать по возрасту, нажмите upvote. ohowoho.
 Victor07 июл. 2009 г., 23:38
Я был уверен, что у меня это было! Эмиль все равно лучше ответит.
 skaffman07 июл. 2009 г., 23:10
Кий поток одинаковых ответов ...
 skaffman07 июл. 2009 г., 23:12
... и голосование первого из одинаковых ответов, чтобы войти ...

Ответы на вопрос(16)

Они известны как постфиксные и префиксные операторы. Оба добавят 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
 01 июн. 2015 г., 03:41
Не должно ли это бытьsuffix?

Да,

int x=5;
System.out.println(++x);

распечатает6 а также

int x=5;
System.out.println(x++);

распечатает5.

 07 июл. 2009 г., 23:20
@ Том, я просто думал о том, как отдать свои голоса, так что вот мое толкование: одна небольшая причина предпочесть ответ Эмиля Н в том, что его пример кода является / немного / более информативным.
 07 июл. 2009 г., 23:27
Jonik. Правда, также включает в себя ключевые слова "preincrement" и "postincrement".
 18 февр. 2012 г., 03:19
Этот & quot; ответ & quot; просто говорит вам вывод теста, и я считаю, что выводы не являются ответами. Напротив, обычно (неожиданный) результат выполнения некоторого кода приводит к вопросу. Отсюда и мой отрицательный голос.

Да, возвращаемое значение является значением после и перед увеличением, соответственно.

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

да

++ x увеличивает значение x, а затем возвращает x
х ++ возвращает значение х и затем увеличивает

пример:

x=0;
a=++x;
b=x++;

после выполнения кода и a, и b будут равны 1, но x будет равен 2.

 07 июл. 2009 г., 23:36
+1 много примеров, этоexplanation с примерами :)
 07 июл. 2009 г., 23:45
Да, я также закончил голосование против этого из-за ясного объяснения прозы в начале. (Хм, не знаю, что вы можете делать курсив в комментариях в настоящее время ...cool)

Если это похоже на многие другие языки, вы можете попробовать просто:

i = 0;
if (0 == i++) // if true, increment happened after equality check
if (2 == ++i) // if true, increment happened before equality check

Если вышеописанное не происходит таким образом, они могут быть эквивалентны

Это огромная разница.

Поскольку в большинстве ответов уже указана теория, я хотел бы указать на простой пример:

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);

На явеthere is a difference междуx++ and ++x

++x is a prefix form: Он увеличивает выражение переменных, а затем использует новое значение в выражении.

Например, если используется в коде:

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++ is a postfix form: Значение переменных сначала используется в выражении, а затем увеличивается после операции.

Например, если используется в коде:

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' 

Надеюсь, это понятно. Запуск и игра с приведенным выше кодом должны помочь вашему пониманию.

Я приземлился здесь с одного из своих недавнихдубликати хотя на этот вопрос более чем дан ответ, я не смог помочь декомпилировать код и добавить «еще один ответ»; :-)

Чтобы быть точным (и, вероятно, немного педантичным),

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 st,ack. 

   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

На вопрос уже дан ответ, но позвольте мне добавить со своей стороны тоже.

Прежде всего++ означает увеличение на единицу и-- означает уменьшение на единицу.

Сейчасx++ означает приращениеx после этой строки и++x означает приращение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
 21 апр. 2015 г., 14:11
Этот ответ был бы даже лучше, если бы он сопровождался несколькими словами объяснения.

Да, используя ++ X, X + 1 будет использоваться в выражении. Используя X ++, X будет использоваться в выражении, а X будет увеличен только после того, как выражение будет оценено.

Таким образом, если X = 9, используя ++ X, будет использоваться значение 10, иначе - значение 9.

Решение Вопроса

++ x называется преинкрементом, а x ++ называется постинкрементом.

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
 20 июл. 2014 г., 10:59
Хорошее объяснение, 1 ++. Ой, ++ 1 :)

Да.

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);
    }
}

Хорошо, я попал сюда, потому что недавно столкнулся с той же проблемой при проверке классической реализации стека. Просто напоминание, что это используется в реализации 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;
  }
}

При рассмотрении того, что на самом деле делает компьютер ...

++ x: загрузить x из памяти, увеличить, использовать, сохранить обратно в память.

x ++: загрузка x из памяти, использование, приращение, сохранение в памяти.

Рассматривать:     а = 0     х = е (а ++)     y = f (++ a)

где функция f (p) возвращает p + 1

х будет 1 (или 2)

у будет 2 (или 1)

И в этом заключается проблема. Передал ли автор компилятора параметр после извлечения, после использования или после хранения.

Как правило, просто используйте x = x + 1. Это проще.

В i ++ это называется postincrement, и значение используется в любом контексте, а затем увеличивается; ++ i - предварительно увеличивает значение, а затем использует его в контексте.

Если вы не используете его ни в каком контексте, не имеет значения, что вы используете, но постинкремент используется по соглашению.

Да, есть разница, в случае 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);  
}

Ваш ответ на вопрос