java中的运算符:'+'with'='vs'+ ='

时间:2013-05-08 09:43:43

标签: java operators

我经常使用两种形式:java中的short和long(也是减法,乘法等)运算符。而且我认为这不会影响性能或速度,但我对这些问题感到困惑:“为什么java创建者提供了这种运算符的两种形式?它们之间有什么区别?”那么,两种形式之间的真正区别是什么:

int a = 10, b = 3;
b = b + a;

int a = 10, b = 3;
b += a;

有人可以解释一下吗?可能两种形式之间的差异隐藏在较低的水平? 每本书都只说:“Java也有复合算子......”但差别没什么。

11 个答案:

答案 0 :(得分:8)

请考虑以下代码:

int x = 9;
short s = 2;
s = s+x; // Compiler error
s += x;  // Compiles 

所以,基本上当你说:s += x时,它意味着s = (short)(s+x)。当你使用s = s+x时,编译器会抱怨,因为它无法隐式地将xint强制转换为short。因此,+=运算符负责类型转换。

答案 1 :(得分:3)

它没有说明差异,因为从程序员的角度来看都没有。在

b = c + a;

符号存在,因为它是添加的正常情况。简短形式

b += a;

存在c""的特殊情况。 b并且真正扩展到

b = b + a;

答案 2 :(得分:2)

不同之处在于,在第一种情况下,会创建一个临时对象c = (a + b),然后将其分配回b。在第二种情况下,操作就位,应该更有效率。

至少,这曾经是旧的C ++:现代编译器和JIT会自动检测和优化它,所以,实际上,没有任何区别。

答案 3 :(得分:1)

一个更短,就是它。

答案 4 :(得分:0)

两个陈述中实际上没有任何区别。

内部的

b += a仅被视为b = b + a

答案 5 :(得分:0)

基本上没有区别。 +=仅供您方便使用。

答案 6 :(得分:0)

Add AND assignment运算符,它将右操作数添加到左操作数并将结果分配给左操作数B += A等同于B = B + A

答案 7 :(得分:0)

到目前为止,我只发现了与逻辑复合运算符的区别:

boolean accepted = firstCheck();

version 1: accepted = accepted && secondCheck();
version 2: accepted &= secondCheck();

上述代码的行为方式不同:

如果接受为假,

版本1将省略调用secondCheck()

版本2将始终调用secondCheck()

答案 8 :(得分:0)

Theres在较低级别隐藏它们之间没有区别。 b += a相当于b = b + a。 但是,这里有一些危险。 b += a似乎是一个原子操作,但它首先读取b,然后读取a,然后对它们求和,然后将结果写入b。将其视为原子操作可能会在处理并发操作时导致错误。换句话说,在并发环境中使用这个较短的+=运算符时,始终要记住提供一些显式锁定。

答案 9 :(得分:0)

另一种问自己相同问题的方法是, java.lang.StringString 之间有什么区别?就源代码的含义而言,区别在于 huge :表现力和可读性。

答案 10 :(得分:0)

这个问题真的很老了。但我想总结一下:我已经找到了 Java Language specification下一个文字:

  

形式 E1 op = E2 的复合赋值表达式是等效的   至 E1 =(T)((E1)op(E2)),其中 T E1 的类型,但除外E1   仅评估一次。

所以,这是理解的!