在Java中,使用`+=`运算符和`=+`运算符有什么区别?

23
我刚刚意识到我使用了=+而不是运算符+=,导致我的程序出现了各种奇怪和意外的问题。
Eclipse没有给我任何错误提示,所以我认为=+是一个合法的运算符,但是在我的书中没有提到过这个运算符。
我的问题是:
=+是什么意思?在什么情况下会使用它?
6个回答

20

一种常见的语法是:

 +=

这是加和赋值运算符,它将右侧表达式添加到左侧变量,然后将结果赋值给左侧变量。例如:

 int i = 1;
 int j = 2;
 i += j;

 // Output: 3
 System.out.println( i )

一种较少使用的语法是:

=+

通常这被写成两个不同的运算符,用空格隔开:

= +

没有空格,它看起来像这样:

int i = 1;
int j = 2;
    
i =+ j;

// Output: 2
System.out.println(i);

一种惯用的写法是将一元运算符移到右边:

int i = 1;
int j = 2;
    
i = +j;

// Output: 2
System.out.println(i);

现在很容易看到i 被赋为正数的j。然而,+是多余的,所以通常会省略,导致 i = j,实际上相当于 i = +1 * j。相反的是负一元运算符:

int i = 1;
int j = 2;
    
i = -j;

// Output: -2
System.out.println(i);

在这里,- 是必需的,因为它反转了 j 的符号,实际上相当于 i = -1 * j

有关更多详细信息,请参见运算符教程


15

=+ 相当于赋值运算符 =

a =+ b;

等同于

a = (+b);

就是说

a = b;

事实上,考虑到a=-1;是一行有效的代码,我认为决定a=+1也应该是有效的,尽管它并没有起到任何作用。我有时候会使用它来强调某些意图。 - Richard Tingle

5
重要的事实需要强调的是,Java中没有=+赋值运算符。
你只需将两个运算符列出,一个接一个地(一个=然后一个+
  • i =+ j;就像写成i = +j;
虽然看起来有点奇怪,但当考虑减号时,每个人都非常清楚。
  • i =- j;i = -j;相同
正如许多其他答案中提到的一样,加和赋值运算符+=
  • 将右手边的表达式添加到左手变量的值中
  • 然后将该加法的值分配给左手变量。

3

+=会将右操作数加到左操作数上,并将结果赋值给左操作数。

=+将一个值赋值给左操作数。


1
实际上说i=ji=+j是相同的并不完全正确,因为i=+j会将变量类型提升为int(如果它小于int),而赋值则不会。例如:
byte b1 = 2;
short s1 = b; // compiles and s1 equals 2 of type short
short s2 = +b; // Compile error: required type: short, provided int
// Because the result of +b equals 2 of type int

0

除了与“=”相同之外,“=+”没有任何效果。


不要使用答案来寻求帮助;如果您想添加评论,请使用注释,或者只需打开一个新问题。 - Rubens

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