2010-04-06 45 views
0

拳頭System.out.println()的輸出與第二個不相同System.out.println()
可能是什麼原因?爲什麼輸出不一樣?

public class swapex{ 
    public static int var1, var2; 

    public void badSwap(int var1, int var2){ 
     int temp = var1; 
     this.var1 = var2; 
     this.var2 = temp; 
     System.out.println("var1 " + var1 + " var2 "+ var2); 
    } 

    public static void main(String args[]) 
    { 
     swapex sw= new swapex(); 
     sw.badSwap(10,20); 
     System.out.println("var1 " + var1 + " var2 "+ var2); 
    } 
} 
+0

這甚至編譯?什麼是'this.var1'? 'var1'是一個** static **類變量,並且是一個本地參數,而不是一個實例成員。無論如何,使用'this.var1'的劇本是本地的,並且什麼都不做,因爲你打印的是'val1',而不是'this.var1'。 – Kobi 2010-04-06 05:31:28

+0

Kobi,this.var1和var1都是指靜態字段。這絕對是不好的風格。 – 2010-04-06 05:35:45

+0

真的嗎? '這個'適用於靜態字段?當我學習Java時,它是'swapex.var1' ... – Kobi 2010-04-06 05:44:08

回答

8

第一個是輸出參數值,第二個是輸出靜態字段。

讓我們來看看相關值的所有含義。

public void badSwap(int var1, int var2){ 

var1var2是在傳遞給該方法的參數。

int temp = var1; 

temp設置爲在var1中傳遞。

this.var1 = var2; 

的靜電場var1被設置爲var2傳遞。這是不好的風格,因爲它是不必要的混淆。如果你有理由使用靜態,請寫swapex.var1

this.var2 = temp; 

此外,靜態字段正在設置。

System.out.println("var1 " + var1 + " var2 "+ var2); 

當地人正在打印。

回到主,行:

System.out.println("var1 " + var1 + " var2 "+ var2); 

因爲有這些名字沒有堆棧變量解析爲靜態字段。再一次,這也是風格不佳。您將使用swapex.var1swapex.var2

因此,他們打印不同的原因是,您首先打印原始未打開的參數,然後交換(與參數相反)靜態字段。

1

您在badswap中設置的變量是本地參數,而不是swapex的靜態成員。由於本地範圍優先,靜態成員是不變

當您打印在第一時間,正在打印的局部變量,第二次,要打印的靜態成員

獲得兩個是同樣,將參數的名稱更改爲badswap()。

+1

這是錯誤的。 badswap設置靜態變量,但打印(不變)當地人。然後,打印(交換的)靜態圖。 – 2010-04-06 05:38:12

+0

拍攝您的權利 – Nathan 2010-04-06 06:03:00

0
In the method badswap the var1 and var2 that 

獲取打印爲,所述方法的局部變量即

badswap(INT VAR1,INT VAR2

and not that of class variables 

公共靜態INT VAR1,VAR2

,這是造成差異的原因。

0

static字段是相對於一個類。關鍵字this通常用於區分同名的局部變量和類變量。建議避免使用這個來引用靜態字段,因爲這是不必要的,但編譯器似乎接受它。

此外,var1和var2只存在於您的badSwap()方法的範圍內。這就是爲什麼你會得到不同的輸出。方法中的sysout顯示參數值,而main中的sysout顯示類變量的值。

相關問題