当前位置: 首页 > 面试题库 >

为什么= +不会导致编译错误?

锺离昂然
2023-03-14
问题内容

遇到一个错误地使用 =+而不是 +=在其代码中的人,它没有显示为编译错误。

是因为

int a =+ 2;

是相同的

int a = 0 + 2;


问题答案:

没有编译错误,因为+它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同-

int x = +1;
int y = -1;

Java语言规范中的相关部分是Unary
Plus运算符+(第15.15.3节)
。它指定调用一元+运算会导致操作数的一元数值提升(第5.6.1节)。这意味着:

* 如果操作数是编译时类型的ByteShortCharacter,或Integer,将其进行取消装箱转换(§5.1.8)。然后,int通过扩展原始转换(第5.1.2节)或身份转换(第5.1.1节),将结果提升为类型值。

* 否则,如果操作数是编译时类型的LongFloat或者Double,对它进行解包转换(§5.1.8)。

* 否则,如果操作数是,或的编译时类型byte,则通过扩展原语转换(第5.1.2节)将其提升为类型的值。short``char``int

  • 否则,一元数值操作数将保持不变,并且不会被转换。

无论如何,都将应用值集转换(第5.1.13节)。

简而言之,这意味着

  1. 数字原始包装器类型是未 装箱的 ,并且;
  2. 小于的整数类型int扩展int


 类似资料:
  • 我尝试在编译器中运行此代码,它给出了“circle”的输出: 我没有将打印功能设置为虚拟,但它仍然具有相同的效果。这有什么原因吗?

  • 根据SQL字符串组合文档,我想在postgresql数据库中执行DELETE语句: 这将导致以下错误: 另一方面,类似的execute工作正常: 我真的看不出有什么区别...

  • 对于我的Java类,要求我们在working For语句中添加分号,并解释为什么输出是这样的。我不明白为什么添加分号会产生错误的树类型错误,导致代码无法编译。代码下面是输出;我还向any标记添加了反斜杠,因为它不会以其他方式显示。那么,为什么for语句后面的分号会导致这样的错误呢?提前谢谢。 运行时间:

  • 我使用比较器对流进行排序,遇到了一个我不理解的编译器错误。 假设我有以下课程: 我正在创建两个比较器,以按日期对s进行排序,一个按自然顺序,另一个按相反顺序。编译以下代码: 意识到是在上定义的,我想我会尝试以下操作: (对我来说)令人惊讶的是,rev2的代码编译正常,而rev1的代码产生以下错误: 为什么我会收到这些编译器错误?为什么我可以在从构建时有效地规避它们? (如果相关的话,我正在使用Ec

  • minecraft 1.8.8的modcoderpack918中的有一个很大的问题。我的Java版本是1.8.0_271-B09。 我不知道我必须做什么。