В чем разница между я ++ и ++ я in for loop (Java)?
Возможные дубликаты:
Разница между я ++ и ++ я в цикле?
Есть ли разница между x ++ и ++ x в java?
Привет, я только начал изучать Java, и теперь я вхожу в for loop statement. Я не понимаю, как работает ++ я i ++ в инструкции цикла for.
Я имею в виду, как они работают в математических операциях, таких как сложение и вычитание. Надеюсь, кто-то мне это объяснит.
Ответы
Ответ 1
Они оба увеличивают число. ++i
эквивалентно i = i + 1
.
i++
и ++i
очень похожи, но не совсем то же самое. Оба увеличивают число, но ++i
увеличивает число до того, как текущее выражение будет оценено, тогда как i++
увеличивает число после вычисления выражения.
int i = 3;
int a = i++; // a = 3, i = 4
int b = ++a; // b = 4, a = 4
Ответ 2
Здесь образец класса:
public class Increment
{
public static void main(String [] args)
{
for (int i = 0; i < args.length; ++i)
{
System.out.println(args[i]);
}
}
}
Если я разбираю этот класс с помощью javap.exe, я получаю следующее:
Compiled from "Increment.java"
public class Increment extends java.lang.Object{
public Increment();
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_0
1: istore_1
2: iload_1
3: aload_0
4: arraylength
5: if_icmpge 23
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: aload_0
12: iload_1
13: aaload
14: invokevirtual #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
17: iinc 1, 1
20: goto 2
23: return
}
Если я изменю цикл, чтобы он использовал я ++ и снова разобрался, я получаю следующее:
Compiled from "Increment.java"
public class Increment extends java.lang.Object{
public Increment();
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_0
1: istore_1
2: iload_1
3: aload_0
4: arraylength
5: if_icmpge 23
8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
11: aload_0
12: iload_1
13: aaload
14: invokevirtual #3; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
17: iinc 1, 1
20: goto 2
23: return
}
Когда я сравниваю два, TextPad сообщает мне, что они идентичны.
Это говорит о том, что с точки зрения сгенерированного байтового кода нет разницы в цикле. В других контекстах существует разница между ++ я и я ++, но не для циклов.
Ответ 3
Оба из них увеличивают переменную i
на единицу. Это как сказать i = i + 1
. Разница тонкая. Если вы используете его в таком цикле, нет разницы:
for (int i = 0; i < 100; i++) {
}
for (int i = 0; i < 100; ++i) {
}
Если вы хотите узнать разницу, посмотрите на этот пример:
int a = 0;
int b = a++; // b = 0; a = 1
a = 0;
b = ++a: // b = 1; a = 1
Идея состоит в том, что ++a
увеличивает a
и возвращает это значение, а a++
возвращает значение, а затем увеличивает a
.
Ответ 4
Обрабатывается путь для цикла
1 Сначала выполняется инициализация (i = 0)
2 выполняется проверка (i < n)
3 выполняется код в цикле.
4 значение увеличивается
5 Повторите шаги 2 - 4
Именно по этой причине нет разницы между я ++ и ++ я в используемом цикле for.
Ответ 5
Разница заключается в том, что оператор post-increment i++
возвращает i
, как и до приращения, а оператор pre-increment ++i
возвращает i
, как и после приращения. Если вы спрашиваете о типичном цикле for
:
for (i = 0; i < 10; i++)
или
for (i = 0; i < 10; ++i)
Они точно такие же, поскольку вы не используете i++
или ++i
как часть большего выражения.
Ответ 6
Оба i++
и ++i
являются короткими для i = i + 1
.
В дополнение к изменению значения я они также возвращают значение я либо перед добавлением одного (i++
), либо после добавления одного (++i
).
В цикле третий компонент представляет собой кусок кода, который выполняется после каждой итерации.
for (int i=0; i<10; i++)
Значение этой части не используется, поэтому приведенное выше значение совпадает с
for(int i=0; i<10; i = i+1)
или
for(int i=0; i<10; ++i)
В тех случаях, когда это имеет значение (между i++
и ++i
), в этих случаях
while(i++ < 10)
for (int i=0; i++ < 10; )
Ответ 7
JLS§14.14.1, Базовый для Statement, дает понять, что выражение ForUpdate оценивается и значение ( s) отбрасываются. Эффект состоит в том, чтобы сделать две формы идентичными в контексте оператора for
.