gpt4 book ai didi

java - 使用 "this.new InnerClass()"和 "new InnerClass()"实例化之间的区别

转载 作者:行者123 更新时间:2023-12-02 03:34:55 24 4
gpt4 key购买 nike

我正在查看一些有关 java 8 认证的 Material ,并发现了类似于下面所示的代码。有人可以解释使用“this”关键字实例化内部类和不使用“this”关键字之间的区别吗?实例化 InnerClass 的两种方法似乎都有效(没有编译器错误或运行时错误)。

这是否类似于使用类名而不是实例名来访问公共(public)静态成员?两种方法都可以,但是使用类名优于使用实例名。

public class OuterClass {

class InnerClass { } // Define Inner class

private InnerClass innerclass; // private member
private InnerClass thisInnerClass; // private member

public OuterClass() {
this.innerclass = new InnerClass(); // without 'this' keyword
this.thisInnerClass = this.new InnerClass(); // with 'this' keyword
}
}

========================================

编辑:两者没有区别。我编译了以下两个版本,两个版本的 md5 和是相同的。使用“this”引用和不使用“this”引用会生成相同的字节码。

    public class OuterClass {

class InnerClass { } // Define Inner class

private InnerClass innerClass; // private member

public OuterClass() {
this.innerClass = new InnerClass(); // without 'this' keyword
}
}

上面编译的代码的 MD5 总和(没有“this”引用):
MD5 (OuterClass$InnerClass.class) = 7f1679f1c7a0201164ce5eb03fe29699
MD5(OuterClass.class)= bf7419b01f8f7c24d2892d10c4fd6e05

    public class OuterClass {

class InnerClass { } // Define Inner class

private InnerClass innerClass; // private member

public OuterClass() {
this.innerClass = this.new InnerClass();// with 'this' keyword
}
}

以上编译代码的 MD5 总和(带有“此”引用):
MD5 (OuterClass$InnerClass.class) = 7f1679f1c7a0201164ce5eb03fe29699
MD5(OuterClass.class)= bf7419b01f8f7c24d2892d10c4fd6e05

最佳答案

我的理解是两者没有区别。这就像从包含 foo() 的类中调用 foo()this.foo()this 未明确写入时是隐含的。

关于java - 使用 "this.new InnerClass()"和 "new InnerClass()"实例化之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37553114/

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