... и голосование за первый из идентичных ответов, чтобы войти ...
skaffman 07
9
чтобы быстрее добраться до трофеев, отсортировать по самым старым, щелкнуть проголосовать. оховохо.
dotjoe 07
1
Я был уверен, что получил! В любом случае, ответ Эмиля лучше.
Виктор
Ответы:
290
++ x называется преинкрементом, а x ++ - постинкрементом.
int x =5, y =5;System.out.println(++x);// outputs 6System.out.println(x);// outputs 6System.out.println(y++);// outputs 5System.out.println(y);// outputs 6
@Tom, я просто обдумывал, как отдать свои голоса, так что вот моя интерпретация: одна небольшая причина предпочесть ответ Эмиля Х заключается в том, что его примерный код / немного / более информативен.
Jonik 07
Йоник. Верно, также включает ключевые слова «преинкремент» и «постинкремент».
Tom
Этот «ответ» просто сообщает вам результат теста, и я считаю, что результаты не являются ответами. Напротив, обычно (неожиданный) результат выполнения некоторого кода приводит к вопросу. Отсюда мой голос против.
Альберто де Паола
8
Я приземлился здесь из одного из его недавних дубликатов , и хотя на этот вопрос более чем дан ответ, я не мог не декомпилировать код и добавить «еще один ответ» :-)
Чтобы быть точным (и, наверное, немного педантичным),
int y =2;
y = y++;
компилируется в:
int y =2;int tmp = y;
y = y+1;
y = tmp;
Если вы javacэтот Y.javaкласс:
publicclass Y {publicstaticvoid main(String[]args){int y =2;
y = y++;}}
publicclass Y extends java.lang.Object{public Y();Code:0: aload_0
1: invokespecial #1;//Method java/lang/Object."<init>":()V4:returnpublicstaticvoid 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 stack3: 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}
++ 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 = 4System.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 = 4System.out.println(y);//It will print out '3'System.out.println(x);//It will print out '4'
Надеюсь, это ясно. Запуск и игра с приведенным выше кодом должны помочь вам понять.
Да, используя ++ X, в выражении будет использоваться X + 1. При использовании X ++ X будет использоваться в выражении, а X будет увеличиваться только после того, как выражение будет оценено.
Итак, если X = 9, используя ++ X, будет использоваться значение 10, иначе значение 9.
Да, возвращаемое значение - это значение после и до увеличения, соответственно.
classFoo{publicstaticvoid 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
Хорошо, я попал сюда, потому что недавно столкнулся с той же проблемой при проверке реализации классического стека. Напоминаем, что это используется в реализации Stack на основе массива, которая немного быстрее, чем реализация связанного списка.
Код ниже, проверьте функции push и pop.
publicclassFixedCapacityStackOfStrings{privateString[] s;privateint N=0;publicFixedCapacityStackOfStrings(int capacity){ s =newString[capacity];}publicboolean isEmpty(){return N ==0;}publicvoid push(String item){ s[N++]= item;}publicString pop(){String item = s[--N];
s[N]=null;return item;}}
Да, есть разница, в случае x ++ (постинкремент), значение x будет использоваться в выражении, и x будет увеличиваться на 1 после того, как выражение было оценено, с другой стороны ++ x (преинкремент), x + 1 будет использоваться в выражении. Вот пример:
publicstaticvoid 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 1System.out.println(k);}
На вопрос уже дан ответ, но позвольте мне добавить и с моей стороны.
В первую очередь ++ означает увеличение на единицу, а - уменьшение на единицу.
Теперь x ++ означает приращение x после этой строки, а ++ x означает приращение x перед этой строкой.
Проверить этот пример
classExample{publicstaticvoid 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);}}
Этот ответ был бы даже лучше, если бы сопровождался несколькими словами объяснения.
Том
0
В i ++ это называется постинкрементом, и значение используется в любом контексте, который затем увеличивается; ++ i is preincrement сначала увеличивает значение, а затем использует его в контексте.
Если вы не используете его ни в каком контексте, не имеет значения, что вы используете, но постинкремент используется по соглашению.
Ответы:
++ x называется преинкрементом, а x ++ - постинкрементом.
источник
да
++ x увеличивает значение x, а затем возвращает x
x ++ возвращает значение x, а затем увеличивает
пример:
после запуска кода и a, и b будут равны 1, а x будет 2.
источник
Они известны как постфиксные и префиксные операторы. В обоих случаях к переменной добавляется 1, но результат оператора отличается.
источник
suffix
?Да,
напечатает
6
инапечатает
5
.источник
Я приземлился здесь из одного из его недавних дубликатов , и хотя на этот вопрос более чем дан ответ, я не мог не декомпилировать код и добавить «еще один ответ» :-)
Чтобы быть точным (и, наверное, немного педантичным),
компилируется в:
Если вы
javac
этотY.java
класс:и
javap -c Y
вы получите следующий код jvm (я разрешил мне прокомментировать основной метод с помощью спецификации виртуальной машины Java ):Таким образом, окончательно имеем:
источник
При рассмотрении того, что на самом деле делает компьютер ...
++ 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. Это намного проще.
источник
В Java есть разница между x ++ и ++ x
++ x - это префиксная форма: она увеличивает выражение переменных, а затем использует новое значение в выражении.
Например, если используется в коде:
x ++ - это постфиксная форма: значение переменных сначала используется в выражении, а затем увеличивается после операции.
Например, если используется в коде:
Надеюсь, это ясно. Запуск и игра с приведенным выше кодом должны помочь вам понять.
источник
Да.
источник
Да, используя ++ X, в выражении будет использоваться X + 1. При использовании X ++ X будет использоваться в выражении, а X будет увеличиваться только после того, как выражение будет оценено.
Итак, если X = 9, используя ++ X, будет использоваться значение 10, иначе значение 9.
источник
Если это похоже на многие другие языки, вы можете просто попробовать:
Если этого не происходит, они могут быть эквивалентными
источник
Да, возвращаемое значение - это значение после и до увеличения, соответственно.
источник
Хорошо, я попал сюда, потому что недавно столкнулся с той же проблемой при проверке реализации классического стека. Напоминаем, что это используется в реализации Stack на основе массива, которая немного быстрее, чем реализация связанного списка.
Код ниже, проверьте функции push и pop.
источник
Да, есть разница, в случае x ++ (постинкремент), значение x будет использоваться в выражении, и x будет увеличиваться на 1 после того, как выражение было оценено, с другой стороны ++ x (преинкремент), x + 1 будет использоваться в выражении. Вот пример:
источник
На вопрос уже дан ответ, но позвольте мне добавить и с моей стороны.
В первую очередь ++ означает увеличение на единицу, а - уменьшение на единицу.
Теперь x ++ означает приращение x после этой строки, а ++ x означает приращение x перед этой строкой.
Проверить этот пример
Это даст следующий результат:
источник
В i ++ это называется постинкрементом, и значение используется в любом контексте, который затем увеличивается; ++ i is preincrement сначала увеличивает значение, а затем использует его в контексте.
Если вы не используете его ни в каком контексте, не имеет значения, что вы используете, но постинкремент используется по соглашению.
источник
Это огромная разница.
Поскольку большинство ответов уже указали на теорию, я хотел бы указать на простой пример:
А теперь посмотрим
++x
:источник