为什么= +不会导致编译错误?
在他们的代码中错误地使用了=+而不是+= ,并且没有显示为编译错误。 
这是因为
 int a =+ 2; 
是相同的
 int a = 0 + 2; 
?
 没有编译错误,因为+是一个有效的(虽然相当无用的) 一元运算符 ,其方式是: 
 int x = +1; int y = -1; 
  Java语言规范中的相关部分是Unary Plus Operator +(第15.15.3节) 。 它指定调用一元+操作导致操作数的一元数字升级(第5.6.1节) 。 这意味着: 
如果操作数是编译时types的
Byte,Short,Character或Integer,则它将经历拆箱转换( §5.1.8 )。 然后通过扩展原语转换( §5.1.2 )或标识转换( §5.1.1 )将结果提升为inttypes的值。
否则,如果操作数是编译时types
Long,Float或Double,则会进行拆箱转换( §5.1.8 )。
否则,如果操作数是编译时types
byte,short或char,则通过扩展原语转换( §5.1.2 )将其提升为inttypes的值。
否则,一个一元数字操作数保持不变,不被转换。
无论如何,值集转换( §5.1.13 )将被应用。
总之,这就是说
- 数字原始包装types被拆箱 ,并;
-  小于int整数types被加宽为int。
 这里可能存在一个bug。 作者可能打算写a += 2; 
 在C的原始版本中, a += 2; 和a =+ 2; 是同义词。 如果你的意思a = +2;  ,你必须小心在=和+之间留出一个空格。 与所有其他运营商一样。 a=*p; 乘以一个p。 a = *p; 取消引用指针p并将结果赋给a。 
 然后,他们开始明白了,并开始给出op=可能意图的警告,现在不再接受=op了。 
但是老习惯很难。 一个古老的C语言程序员可能会依然心不在焉地使用旧式的语法,即使用C以外的语言写作也是如此。
 另一方面, = in int x =+ 2; 是一个初始化,而不是一个赋值,对程序员来说,增加一个刚刚被赋予初始值的variables是很奇怪的。