使用'this'调用实例方法与没有'this'调用它 - 是否有区别?

时间:2016-02-15 12:30:16

标签: java object this instance instance-methods

第8行的呼叫getName()与第9行的呼叫有什么区别。

如果是,那么它是什么?

这可能非常简单,但我进行了Google搜索,我得到的唯一SO result是关于将this与字段一起使用,而不是使用方法。

class CallingInstanceMethodWithAndWithoutThis {

    private String getName() {
        return "Zarah";
    }

    private void printGetName() {
        System.out.println(getName());
        System.out.println(this.getName());
    }

    public static void main(String [] args) {
        new CallingInstanceMethodWithAndWithoutThis().printGetName();
    }

}

3 个答案:

答案 0 :(得分:1)

没有区别,它只是一种编码惯例。此外,您可以要求Eclipse自动删除"这个"当不需要作为保存动作时。

答案 1 :(得分:1)

对于编译器没有区别,但在某些情况下可能会导致冲突。一般不使用this就行了,java编译器足够智能识别我们的意图,但强烈建议使用this关键字(例如在setter中),IMO它更清楚了解方法的来源(如果您的类扩展了其他方法或者您静态导入某些方法)。

答案 2 :(得分:1)

使用$config['use_page_numbers'] = TRUE与不使用它之间没有区别。

要检查这一点,事实上,如果我们使用this执行反汇编,则输出如下:

javap -p -c CallingInstanceMethodWithAndWithoutThis

我们可以注意到第0行和第10行(我们称之为 private void printGetName(); Code: 0: getstatic #19 // Field java/lang/System.out:Ljava/io/PrintStream; 3: aload_0 4: invokespecial #25 // Method getName:()Ljava/lang/String; 7: invokevirtual #27 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 10: getstatic #19 // Field java/lang/System.out:Ljava/io/PrintStream; 13: aload_0 14: invokespecial #25 // Method getName:()Ljava/lang/String; 17: invokevirtual #27 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 方法)的输出是相同的,没有区别。