2016-02-15 49 views
0

是否有通話之間getName()第8行和任何區別上線9用'this'調用實例方法與不用'this'調用它 - 是否有區別?

如果是的話,又是什麼呢?

這可能很簡單,但我做了我的谷歌搜索,我得到的唯一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(); 
    } 

} 
+4

沒有區別。 – Satya

+1

你基本上在你的問題中包含了你的問題的重複。答案是一樣的。 –

+0

@pp_我提到了它爲什麼不是一個完全相同的副本。那是關於田野的。這一個是關於方法。 – Solace

回答

1

沒有區別,它只是一個使用的編碼慣例。此外,您可以讓Eclipse例如在不需要作爲保存操作時自動刪除「this」。

1

對於編譯器來說沒有區別,但在某些情況下可能會導致衝突。通常不使用this會好,java編譯器足夠聰明,可以識別我們的意圖,但強烈建議使用this關鍵字(例如在setter中),IMO更清楚瞭解方法來自哪裏(如果您的類擴展其他或者你靜態地導入一些方法)。

1

使用this而不使用它沒有區別。

要檢查這個問題,其實,如果我們執行使用javap -p -c CallingInstanceMethodWithAndWithoutThis輸出低於拆解:

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 

我們可以看到,在0線和10號線的輸出(在這裏我們呼籲getName()法)同樣沒有區別。

相關問題