为什么 n+++n 有效而 n++++n 无效?

2023-11-23

在Java中,表达式:

n+++n

似乎评估相当于:

n++ + n

尽管事实上+n是一个有效的一元运算符,其优先级高于算术运算符+运算符在n + n。因此编译器似乎假设该运算符不能是一元运算符并解析该表达式。

然而,表达式:

n++++n

无法编译,即使有一个有效的可能性将其解析为:

n++ + +n

++n and +n被指定为具有相同的优先级,那么为什么编译器会解决看似不明确的问题n+++n赞成算术+但不这样做n++++n?


首先使用最大咀嚼规则对文件进行标记(转换为标记序列) - 始终获得最长的可能有效标记。您的文本将转换为以下顺序:

n ++ ++ n

这不是有效的表达。

From JLS §3.2:

3.2.词汇翻译

使用以下三个方法将原始 Unicode 字符流转换为标记序列 词汇翻译步骤,依次应用:

  1. Unicode 原始流中 Unicode 转义符 (§3.3) 的翻译 字符到相应的 Unicode 字符。 Unicode 转义 \uxxxx 形式,其中 xxxx 是十六进制值,表示 编码为 xxxx 的 UTF-16 代码单元。这个翻译步骤 允许仅使用 ASCII 字符来表达任何程序。

  2. 将步骤 1 产生的 Unicode 流转换为输入字符和行终止符的流(第 3.4 节)。

  3. 将步骤 2 产生的输入字符流和行终止符转换为输入元素序列 (§3.5),在空格(§3.6)和注释(§3.7)之后是 被丢弃,包括作为终结符的标记(§3.5) 句法语法(§2.3)。

每一步都会使用尽可能长的翻译,即使结果最终没有生成正确的程序,而另一个程序却无法生成正确的程序。 词汇翻译会。

(因此,输入的字符a--b被标记化(§3.5)为a, --, b, 这不是任何语法正确的程序的一部分,即使 标记化a, -, -, b可能是语法正确的一部分 程序。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 n+++n 有效而 n++++n 无效? 的相关文章

  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

  • 如何从在线 UML 模型生成 Java?

    我需要在线创建 UML 类图并从中生成 Java 代码 像 cacoo 这样的绘图工具不允许生成代码 因为它们不是真正的 UML 建模器 有人知道生成 Java 代码的 UML 在线工具吗 谢谢你的帮助 你应该看看 GenMyModelUM
  • 解决类似 Flood-It 难题的最少点击次数

    我有 N M 网格 其中每个单元格都用一种颜色着色 当玩家单击颜色为 的网格中的任何单元格时 颜色为 的网格左上角的单元格将接收颜色 但不仅如此 所有通过以下方式连接到源的单元格仅使用颜色 或 的路径也会接收颜色 单元之间的连接应仅在水平和
  • 在dos批处理脚本中检测sqlplus错误?

    我们有以下批处理脚本 echo release sql echo exit sqlplus x y orcl if errorlevel gtr 1 goto dberror 问题是 声明if errorlevel gtr 1当出现 sql
  • ASP.NET MVC 语言更改链接

    我有一个 ASP NET MVC 站点 它使用资源以两种语言显示 为了允许服务器以适当的语言显示站点 取决于用户浏览器中配置的语言 我将以下内容放入 web config 中
  • 为什么使用 HTML5 语义标签而不是 div? [复制]

    这个问题在这里已经有答案了 为什么使用 HTML5 语义标签headers section nav and article而不是简单地div与首选的css to it 我创建了一个网页并使用了这些标签 但它们与div 他们的主要目的是什么
  • 当 python 文件必须使用 #!/bin/env python 时处理多个 python 版本

    我有这个问题 System A运行 Ubuntu 并需要Python 2 6对于一堆不同的事情 我安装了Python 2 7分别于System A System B has Python 2 7原生地 我有一个 python 脚本BLAH其
  • OSGI 缺少需求错误

    我是 OSGI 新手 我正在尝试弄清楚如何解决如下错误 org osgi framework BundleException 捆绑包 org foo serviceBundle 253 中未解决的约束 无法解析 253 0 缺少需求 253
  • 如何阻止 SwiftUI 选择器对其可见区域之外的触摸做出反应?

    我在视图中有一个选择器 我希望将其限制为定义的高度和宽度 虽然下面的代码在视觉上实现了这一点 但选择器响应其区域之外的点击操作 在某些情况下 响应点击附近的按钮 就像我点击将选择器滚动到其值的开头或结尾一样 按钮不会响应点击 选择器会响应
  • MultinomialNB 错误:“未知标签类型”

    我有两个 numpy 数组 X train 和 Y train 其中第一个维度 700 1000 由值 0 1 2 3 4 和 10 填充 第二个维度 700 由值填充值 新鲜 或 腐烂 因为我正在使用烂番茄的 API 由于某种原因 当我执
  • Entity Framework 7 中表和属性的名称不区分大小写

    我使用 Entity Framework 7 和 Npgsql 适配器 EF生成的Sql看起来像 SELECT r Id r Name FROM public Role AS r 它在 Postgres 中不起作用 因为区分大小写的策略 为
  • JavaScript 函数导入不起作用

    我正在尝试从单独的 js 文件导入函数 当我声明导入命令时 页面不执行代码 但是 当我删除导入命令并执行一个简单的警报 Hello 时 页面上会弹出该内容 项目结构 Todo 应用程序 js 两个 js main js index html
  • 有没有办法在 Javascript 中获取所有事件侦听器绑定?

    我正在寻找一种我可以的方法列出所有事件侦听器绑定是在网站上用 JS 或其他脚本 制作的 主要是我想找出双重绑定 出于调试原因 但我想它还有其他问题 杰出的将是浏览器的插件 您可以在网站上看到哪些元素具有哪些类型eventlisteners边
  • 使用 data.table 进行内存分析

    在包含调用的 R 代码中分析内存的正确方法是什么data table功能 假设我想确定表达式期间的最大内存使用量 该参考文献表明Rprofmem可能不是正确的选择 https cran r project org web packages
  • 组合向量和 data.frame 匹配列值和向量值

    I have vetor lt c 1 2 3 data lt data frame id c a b a c a 我需要一个将每个向量值与特定 id 相匹配的 data frame 输出 结果 id vector1 1 a 1 2 b 2
  • CGRect 和 CGPath 的交集

    有没有一种有效的方法来检测 CGPath 和 CGRect 是否相交 我考虑过循环遍历 CGRect 内的每个点 如下所示 for CGPoint point in rect if CGPathContainsPoint path nil
  • C# 5 的“即发即忘”中的异常处理(在 .net 4.5 中)

    考虑以下 一劳永逸 用例 调用者从我的方法请求一些数据 我的方法检查缓存以查看数据是否已经存在 如果不是 它会从源中获取并缓存它 调用者在获取结果之前不需要等待缓存发生 并且如果缓存失败 该方法不应阻止调用者获取结果 我今天所拥有的 看起来
  • 为什么我的 Python 代码为列表中的所有元素提取相同的数据?

    My project consists of making a competitive watch table for hotel rates for an agency It is a painful action that I want
  • 如何查找给定列是否存在唯一键约束

    我正在编写一个 perl 脚本 我需要在其中运行更新查询 但我需要检查 update sql 命令是否不违反唯一键约束 所以如果我有一张桌子tb C1 C2 C3 我的更新查询如下 update tb set C1 b1 where C2
  • 如何在HTML中正确引用本地资源?

    事实证明 引用本地资源可能是一些人的摩擦点 我正在寻找本地资源引用的规范答案及其含义 拿这些例子来说 这些参考路径有什么区别呢 img src myfile png 没有前导斜杠 img src myfile png 带有前导斜杠 img
  • 为什么 n+++n 有效而 n++++n 无效?

    在Java中 表达式 n n 似乎评估相当于 n n 尽管事实上 n是一个有效的一元运算符 其优先级高于算术运算符 运算符在n n 因此编译器似乎假设该运算符不能是一元运算符并解析该表达式 然而 表达式 n n 无法编译 即使有一个有效的可