gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:46 27 4
gpt4 key购买 nike

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

  1. 这个

    this.myMethod(4);
  2. 没有这个

    myMethod(4);

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

较弱的陈述:给定程序 P,我能否仅通过删除 this. 来创建程序 P'在每个方法调用之前?

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

你能用反证法证明我错了,或者给我一些构造等价性证明的线索吗?非常感谢。

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

最佳答案

Java Language Specification

  • If the form is MethodName - that is, just an Identifier - then:
    • Otherwise, let T be the enclosing type declaration of which the method is a member, and let n be an integer such that T is the n'th lexically enclosing type declaration of the class whose declaration immediately contains the method invocation. The target reference is the n'th lexically enclosing instance of this.

When used as a primary expression, the keyword this denotes a value that is a reference to the object for which the instance method or default method was invoked (§15.12), or to the object being constructed

  • If the form is Primary . [TypeArguments] Identifier involved, then:
    • Otherwise, the Primary expression is evaluated and the result is used as the target reference.

Primary 这里指的是this.*.

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

关于java - Java调用方法时可以省略 'this'吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26043270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com