Java调用方法时可以省略this吗?

pet*_*bel 5 java methods grammar this invoke

我对 Java (6/7/8) 语法有一个愚蠢的问题 - 这两个方法调用片段总是等效的吗?

  1. this

    this.myMethod(4);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 没有this

    myMethod(4);
    
    Run Code Online (Sandbox Code Playgroud)

注意:当然,问题是关于参数的每个数字、类型和组合

较弱的语句:给定程序P,我可以仅通过在每个方法调用前面P'删除来创建程序吗?this.

我考虑了本地类、匿名类、内部类和各种继承,但没有发现任何矛盾。所以我相信这两个片段实际上是相同的。不幸的是我无法找到任何合适的证明(例如来自官方语法)。

你能通过反证证明我错了,或者给我一些构建等价证明的线索吗?多谢。

编辑:等价被证明是错误的(见下面的评论)那较弱的陈述呢?

Sot*_*lis 3

Java语言规范指出

\n\n
\n
    \n
  • 如果形式是MethodName- 即只是一个Identifier- 则: \n
      \n
    • 否则,令T为该方法所属的封闭类型声明,并令 n 为一个整数,该整数是其声明T立即包含该方法调用的类的第 n 个词法封闭类型声明。目标引用是 的第 n 个词法封闭实例this
    • \n
  • \n
\n
\n\n

\n\n
\n

当用作主要表达式时,关键字this表示一个值\n,该值是对调用其实例方法或\n 默认方法的对象的引用 (\xc2\xa715.12),或对正在构造的对象\n 的引用

\n
\n\n

\n\n
\n
    \n
  • 如果涉及到表单Primary . [TypeArguments] Identifier,则:\n
      \n
    • 否则,将计算 Primary 表达式并将结果用作目标引用。
    • \n
  • \n
\n
\n\n

Primary这里指的是this.*.

\n\n

在这两种情况下,该方法都将解析为相同的方法。\n鉴于所有这些信息,没有可以P\'从可编译程序创建的可编译程序P

\n