java - 数字提升仅适用于算术运算符?

标签 java type-conversion jls type-promotion

JLS 规定数值提升应用于算术运算符的操作数。

Numeric promotion is applied to the operands of an arithmetic operator. Numeric promotion contexts allow the use of: an identity conversion (§5.1.1) a widening primitive conversion (§5.1.2) an unboxing conversion (§5.1.8)

但是,根据我的经验,我发现数字提升也适用于其他运算符(例如按位运算符)的操作数。我发现this其中指出

These conversions can occur when using the multiplicative operators (%, *, /), additive operators (+, -), comparison operators (<, >, <=, >=), equality operators (==, !=), and the integer bitwise operators (&, |, ^).

所以我错过了什么吗?

编辑:其他未列出的运算符(如 &&、||、>>、<<、>>> 等)又如何?

编辑2:正如@Turing85和@Stephen C所指出的,这个问题仅对JLS 5到11有效,并且现已解决。

最佳答案

您找到的文本出现在 JLS section 5.6 中。值得注意的是:

  1. 这是介绍性描述性文本,而不是规范性文本。
  2. 它没有准确说明“算术”运算符在此上下文中的含义。
  3. 相反,它并没有说数字提升不适用于(可以说)不是“算术”运算符的其他运算符。

如果您继续阅读 5.6.1 部分和 5.6.2 ,您将找到一元和二进制数字提升适用的运算符。

请注意,上述内容适用于 JLS 版本 5 和 11。到 JLS 14,他们已将第 5.6.1 和 5.6.2 节折叠到第 5.6 节中。 。措辞已更改(删除您认为矛盾的文字)。相关运营商全部(仍然)列出。

(这是编辑整理,而不是实际语言语义的变化。)

关于java - 数字提升仅适用于算术运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63415067/

相关文章:

java - BindingResult 和 bean 名称 '...' 的普通目标对象都不能作为请求属性

java - 由于用户看不到的字符串,生成随机 "key"

java - Reduce for parallel stream without combiner 由多个线程正确执行。在这种情况下我什么时候应该使用组合器?

c# - 为什么动态转换会抛出异常?

delphi - Delphi:从二进制表示形式定义const double

Java - 使用相同的方法和不同的返回类型实现多个接口(interface)

java - 为什么在两个项目中从左到右对 ImageView 进行动画处理时,我收到不同的结果?

sql-server - SQL Server 导入和导出向导中的源类型 200?

java - Java 中是否保证从左到右的操作顺序?

java - 为 Java 的 lambda 体提供 this 关键字会出现什么问题?