a += b 和 a =+ b 有什么区别?a++ 和 ++a 又是什么意思?

25

正如标题所述,

a += b 和 a =+ b 有什么区别?另外, a++ 和 ++a 有什么区别?我有点困惑。


7
在早期版本的C语言中,=++=是等价的。由于理由显而易见,这种写法已被弃用。 - Tom Hawtin - tackline
9个回答

38

a += b 相当于 a = a + b

a = +b 相当于 a = b

a++++a 都将 a 增加1。 它们的区别在于,a++ 在增加前返回 a 的值,而 ++a 在增加后返回 a 的值。

即:

a = 10;
b = ++a; //a = 11, b = 11

a = 10;
b = a++; //a = 11, b = 10

1
回复:“a += b 等同于 a = a + b”:一个小小的学究式的细节:如果 a 的评估涉及副作用,则这些副作用仅发生一次。例如,在 foo().x += y 中,foo 方法只被调用一次,而在 foo().x = foo().x + y 中,它被调用两次(甚至每次可能返回不同的实例,在这种情况下,被分配的 x 与正在读取的 x 不同)。 - ruakh

18

a += b 相当于 a = a + b

a = +b 相当于 a = b

a++后缀递增++a前缀递增。当它们用在单独的语句中时,它们没有区别,然而它们的求值结果不同:a++ 返回递增之前的a 的值,而++a返回递增之后的值。也就是说:

int a = 1;
int b = a++; // result: b == 1, a == 2
int c = ++a; // result: c == 3, a == 3

6

其他人已经回答了你大部分的问题。然而对于你的第二个例子,他们遗漏了一点。

a = +b 赋值操作将 +b 的值赋给 a。"一元加号" 对于数值类型是一个无操作,但对于其他类型的对象(例如字符串),它是一个编译时错误。它主要提供了一种方法,可以在需要时为数字添加前导 + 符号,这是不必要的,但在某些情况下可以提高可读性。


4

a+=b ========> a=a+b

这个语法是将变量a和变量b相加,并将结果赋值给变量a。这等同于a=a+b。

a=+b ========> a=b

这个语法是将变量b的值赋值给变量a。请注意,这里使用的是单个加号而不是加等号。

++a会增加变量的值并返回增加后的值。

a++会增加变量的值,但返回增加前的值。


3

Java运算符

a += b;  // a = a + b
a = +b;  // a = b
a++;     // a = a + 1 (returning a if used inside some expression)
++a;     // a = a + 1 (returning a + 1 if used inside some expression)

2
a += b <=> a = a + b
a =+ b <=> a = b
a++ // post increment, means the value gets used, and after that, a is incremented by one
++a //pre increment, a is incremented by one before the value is used

2

a++ 首先读取 a 的值,然后将其值增加。++a 首先将值增加,然后读取它。你可以很容易地通过打印它们来看出差异。

int a = 4;
System.out.println(a++); // prints 4, after printing, a == 5
System.out.println(++a); // first increments a, then reads its value (6), and that's what got printed.

对于a += ba = +b,@Péter Török之前已经给出了清晰的答案。


1
  • a += b; 相当于 a = a + b;

  • a =+ b; 相当于 a = +b;。这意味着将正数+b赋给变量a

  • a++ 是对变量a进行后增量操作,这意味着在增加1之前使用变量的值。

  • ++a 是对变量a进行预增量操作,这意味着在增加1之后使用变量的值。


-1

您可以在这里找到区别 这里。您提到的所有情况都有示例!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接