2011-01-28 250 views
0

假設有一個像下面這樣的類。getA()和this.getA()之間有什麼區別?

public Class SomeClass { 
    private A getA() { 
     ... 
    } 

    public void show() { 
     A a = getA(); // CASE #1 
     ... 
    } 

    public void show2() { 
     A a = this.getA(); // CASE #2 
     ... 
    } 

他們的結果是一樣的,是不是?我的白癡同事堅持說對了!!(這意味着他們是不同的)

+0

是的,它們是一樣的。 – Rekin 2011-01-28 01:37:10

回答

5

它們在這種情況下是相同的。我主張不要使用this,因爲它暗含了它,它只是讓代碼在那裏混亂,但它是否存在並沒有實際的區別。

雖然這不是沒用的。所述this關鍵字有時需要,例如:當一個局部變量/參數隱藏它用來區分它們

  • 當提及從內實例的類的外實例的字段

    • (使用外。本)
    • 當使用明確的泛型類型調用一個方法,而不是僅僅infered類型(你不能只是做<String, String>stringMethod(),它必須是this.<String, String>stringMethod()

    這決不是一個詳盡的列表,只是作爲一個例子來演示,雖然在這種情況下它沒有什麼區別,但它可以在其他情況下做到!

  • 2

    你的同事畢竟不是那麼多白癡,因爲他們都是都是一樣的。在第一種情況下,Java含蓄暗示this

    2

    我會舉出我在學校時間遇到的這個指針的最好例子。

    class ThisChk 
    { 
        int param1; 
        public int check(int param1) 
        { 
         this.param1 = param1; //this.param1 is the class variable param1, param1 is the function parameter with a local scope 
         return 0; 
        } 
    } 
    
    1

    這裏有一個情況,你可能想用'this'來說明一下。

    class Outer { 
        A a; 
    
        public A getA() { 
         return a; 
        } 
    
        class InnerSuper { 
          A a; 
    
          public A getA() { 
           return a; 
          } 
        } 
    
        class Inner extends InnerSuper { 
         public void test() { 
          A a = Outer.this.getA(); 
          A a = this.getA(); 
         } 
        } 
    } 
    
    相關問題