Java中++i和i++的区别_赋值

在Java中,i++++i 都是自增操作符,它们用来将变量 i 的值增加1。但是,它们在执行时有细微的差别:

  1. i++(后缀自增):
  • 在表达式中使用 i++ 时,表达式的值是自增操作之前 i 的值。
  • 表达式执行完毕后,i 的值会增加1。
  1. ++i(前缀自增):
  • 使用 ++i 时,表达式的值是自增操作之后 i 的值。
  • 表达式执行的同时,i 的值就增加了1。

这两种自增操作符的主要区别在于它们在表达式中的使用方式。例如:

int i = 5;
int a = i++; // a 将会是 5,因为 i++ 先返回 i 的原始值,然后 i 增加 1。
int b = ++i; // b 将会是 7,因为 ++i 首先将 i 增加 1,然后返回新的 i 值。

在这个例子中,a 被赋值为 5,因为 i++ 返回了 i 操作前的值。而 b 被赋值为 7,因为 ++i 在返回值之前先将 i 增加了1。

在单次赋值或打印操作中,使用 i++++i 通常没有区别,因为它们都会使 i 的值增加1。但是,在更复杂的表达式中,它们的行为可能会导致不同的结果。例如:

int i = 5;
int c = i++ + 10; // c 将会是 15,因为 i++ 先返回 i 的原始值 5,然后 i 增加 1。
int d = ++i + 10; // d 将会是 22,因为 ++i 首先将 i 增加 1 变成 7,然后返回 7,最后与 10 相加。

在这种情况下,c 的值是 15,因为 i++ 返回了 i 操作前的值。而 d 的值是 22,因为 ++i 在参与加法运算之前先将 i 增加了1。


这样说还是会有些抽象,让我们更详细地探讨 i++(后缀自增)和 ++i(前缀自增)的区别,并通过一些示例来阐明它们的行为。

基本概念

  • 后缀自增 (i++): 这个操作符在表达式求值之后增加变量的值。也就是说,它会先返回变量的原始值,然后再将变量的值增加1。
  • 前缀自增 (++i): 这个操作符在表达式求值之前增加变量的值。也就是说,它会先将变量的值增加1,然后返回新的值。

赋值操作

在赋值操作中,i++++i 的区别最为明显:

int i = 0;

// 使用后缀自增
int a = i++; // a = 0, i = 1 (i++ 返回 i 的原始值,然后 i 增加 1)
System.out.println("a = " + a + ", i = " + i);

// 使用前缀自增
int b = ++i; // b = 2, i = 2 (++i 先将 i 增加 1,然后返回新的 i 值)
i = 1; // 重置 i 的值以便下一个示例
System.out.println("b = " + b + ", i = " + i);

表达式求值

在表达式中,i++++i 的使用会影响表达式的结果:

int i = 0;

// 使用后缀自增在表达式中
int c = i + i++; // c = 0 + 1 = 1, i = 1 (i++ 返回 i 的原始值,然后 i 增加 1)
System.out.println("c = " + c + ", i = " + i);

// 使用前缀自增在表达式中
int d = ++i + i; // d = 2 + 1 = 3, i = 2 (++i 先将 i 增加 1,然后返回新的 i 值)
i = 0; // 重置 i 的值以便下一个示例
System.out.println("d = " + d + ", i = " + i);

循环

在循环中,两种自增操作符都可以使用,但是它们的行为略有不同:

for (int i = 0; i < 5; i++) {
    // 使用后缀自增
    System.out.println(i++); // 打印 01234, i 在每次循环结束时增加 1
}

for (int i = 0; i < 5; i++) {
    // 使用前缀自增
    System.out.println(++i); // 打印 12345, i 在每次循环开始时增加 1
}

总结

  • i++ 在表达式求值后增加变量的值,因此它返回原始值。
  • ++i 在表达式求值前增加变量的值,因此它返回增加后的值。
  • 在简单的赋值或循环中,两种操作符都可以使用,但是它们的行为和结果可能不同。
  • 在复杂的表达式中,选择 i++++i 可能会影响最终的计算结果。

在实际编程中,通常推荐使用 ++i,因为它的行为更直观,即先增加后返回,这有助于减少因 i++ 的后增量行为导致的潜在错误。