为什么 =+ 不会导致编译错误?
遇到有人错误地在他们的代码中使用而不是,它没有显示为编译错误。=+
+=
这是因为
int a =+ 2;
与 相同
int a = 0 + 2;
?
遇到有人错误地在他们的代码中使用而不是,它没有显示为编译错误。=+
+=
这是因为
int a =+ 2;
与 相同
int a = 0 + 2;
?
没有编译错误,因为 是一个有效的(尽管相当无用的)一元运算符,其方式与以下方式相同:+
-
int x = +1;
int y = -1;
Java 语言规范中的相关部分是一元加运算符 + (§15.15.3 )。它指定调用一元运算会导致一元数字提升 (§5.6.1) 的操作数。这意味着:+
如果操作数是编译时类型 、 、 或 ,则需进行拆箱转换 (§5.1.8)。然后,通过加宽基元转换 (§5.1.2) 或标识转换 (§5.1.1) 将结果提升为类型值。
Byte
Short
Character
Integer
int
否则,如果操作数是编译时类型 、或 ,则将对其进行取消装箱转换 (§5.1.8)。
Long
Float
Double
否则,如果操作数是编译时类型 、 或 ,则通过加宽基元转换将其提升为类型的值 (§5.1.2)。
byte
short
char
int
否则,一元数字操作数将保持原样,并且不会进行转换。
在任何情况下,都会应用值集转换 (§5.1.13)。
简而言之,这意味着
int
int
这里可能潜伏着一个错误。作者可能打算写a += 2;
在C的原始版本中,并且是同义词。如果你的意思是,你必须小心地在 和 之间留出一个空格。与所有其他运算符相同。 将 a 乘以 p。 取消引用指针 p 并将结果分配给 a。a += 2;
a =+ 2;
a = +2;
=
+
a=*p;
a = *p;
然后他们醒悟过来,开始警告他们可能打算去哪里,现在不再接受。=op
op=
=op
但旧习惯很难改掉。一个老派的C程序员可能仍然会心不在焉地使用老派的语法,即使用C以外的语言编写也是如此。
另一方面,in是一个初始化,而不是赋值,对于程序员来说,从递增一个刚刚被赋予其初始值的变量的角度来看待是很奇怪的。=
int x =+ 2;