正如标题所述,
a += b 和 a =+ b 有什么区别?另外, a++ 和 ++a 有什么区别?我有点困惑。
正如标题所述,
a += b 和 a =+ b 有什么区别?另外, a++ 和 ++a 有什么区别?我有点困惑。
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
a += b
等同于 a = a + b
”:一个小小的学究式的细节:如果 a
的评估涉及副作用,则这些副作用仅发生一次。例如,在 foo().x += y
中,foo
方法只被调用一次,而在 foo().x = foo().x + y
中,它被调用两次(甚至每次可能返回不同的实例,在这种情况下,被分配的 x
与正在读取的 x
不同)。 - ruakha += 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
其他人已经回答了你大部分的问题。然而对于你的第二个例子,他们遗漏了一点。
a = +b
赋值操作将 +b
的值赋给 a
。"一元加号" 对于数值类型是一个无操作,但对于其他类型的对象(例如字符串),它是一个编译时错误。它主要提供了一种方法,可以在需要时为数字添加前导 +
符号,这是不必要的,但在某些情况下可以提高可读性。
a+=b ========> a=a+b
这个语法是将变量a和变量b相加,并将结果赋值给变量a。这等同于a=a+b。
a=+b ========> a=b
这个语法是将变量b的值赋值给变量a。请注意,这里使用的是单个加号而不是加等号。
++a会增加变量的值并返回增加后的值。
a++会增加变量的值,但返回增加前的值。
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)
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
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 += b
和a = +b
,@Péter Török之前已经给出了清晰的答案。
a += b;
相当于 a = a + b;
。
a =+ b;
相当于 a = +b;
。这意味着将正数+b
赋给变量a
。
a++
是对变量a
进行后增量操作,这意味着在增加1
之前使用变量的值。
++a
是对变量a
进行预增量操作,这意味着在增加1
之后使用变量的值。
=+
与+=
是等价的。由于理由显而易见,这种写法已被弃用。 - Tom Hawtin - tackline