2016-04-25 67 views
0

我正在評論我在互聯網上找到的程序,我試圖弄清楚它是如何工作的,但是我找不到任何有關這個功能的東西可以幫助我。

public static double regress(double x, ArrayList<Double> terms) { 
    double a = 0.0; 
    int exp = 0; 
    Iterator<Double> i$ = terms.iterator(); 
    while (i$.hasNext()) { 
     double term = i$.next(); 
     a += term * Math.pow(x, exp); 
     ++exp; 
    } 
    return a; 
} 

我知道的方法是在一個ArrayList來計算a值迭代,但它是什麼意思這條線Iterator<Double> i$ = terms.iterator();?更具體地說,這個符號$之後使用了什麼變量i

+1

'$'意味着什麼具體的,只是一個字符在變量 – Andrew

+0

其分毫......他們可以用它爲一些獨特的識別... –

+0

你爲什麼不嘗試用repalacing更有意義的I $。 – Priyamal

回答

0

i$只是您的變量的名字的確的$是一個字符,您可以使用它來定義Java標識符的名稱。要檢查是否字符被允許(在Java標識符中除首字符外),可以使用Character.isJavaIdentifierPart(char),如果你有$測試它,你會得到true如在Javadoc中提到:

字符可能是Java標識符的一部分,如果任何以下 的爲真:

  • 它是一個字母

  • 它是貨幣符號(例如{@code '$'})

  • 它被連接標點符號字符(例如{@code '_'})

  • 它是一個數字

  • 它是一個數字的字母(如羅馬數字字符)

  • 它是一個組合標記

  • 它是一個非空格標記

  • {@code isIdentifierIgnorable}返回{@code true}用於字符

0

$沒有任何特殊的含義。在你提到的一個迭代器對象列表中,術語被創建,然後用它來訪問它的所有元素。我對變量名稱只是一個奇怪的選擇。

0

$只是標識符的一部分,即變量的名稱。您只能使用少數特殊符號作爲標識符的一部分。 $是其中之一。 (實際上所有的貨幣符號都是允許的)。

它沒有什麼特別的含義。

但是編譯器使用它的一個地方是使用內部類。然後它用來將Inner類的名稱與主類分開。
例如:MyClass$InnerClass1.class

0

這看起來像是由反編譯器「寫」的代碼。不要指望反編譯的代碼特別可讀。對於什麼是值得的,一個(人)的Java程序員可能會編寫代碼在你的問題是:

public static double regress(double x, ArrayList<Double> terms) { 
    double a = 0.0; 
    int exp = 0; 
    for (double term : terms()) { 
     a += term * Math.pow(x, exp); 
     ++exp; 
    } 
    return a; 
} 

$字符是一個Java標識符的法律性質,除了它是非正式地保留使用編譯器,源代碼生成器和其他工具。強烈建議不要在人類書面代碼中使用$。 作爲JLS 3.8說:

$符號應該僅在機械上生成的源代碼使用,或者很少,訪問遺留系統預先存在的名稱。

如果您不確定地使用$,您可能會遇到麻煩。該字符用於內部類的合成名稱,以及內部類在封閉範圍內引用「有效最終」局部變量時使用的合成變量。如果您聲明瞭自己的$變量,那麼它們可能會與編譯器的使用衝突,並且結果將不確定。

0

$是在標識符使用有效符號;這意味着沒什麼特別的

然而,請參閱JLS Section 3.8,這表明$不應典型地在標識符用於:

$符號應當只用於在機械上生成的源代碼或,很少,訪問預先存在的名稱在傳統系統上。

相關問題